Mam widok kręgosłupa o nazwie Foo, który mapasek przewijania. Gdy pasek przewijania zostanie przesunięty w pewnym kierunku, chcę, aby inne widoki w mojej aplikacji zmieniały się na różne sposoby. Widoki te nie są zagnieżdżone w Foo - są całkowicie oddzielone i zarządzane niezależnie.
Czy powinienem przekazać odniesienia do wszystkich innych poglądóww konstruktorze Foo, aby mógł je ręcznie zaktualizować? Czy powinienem użyć zdarzeń, aby powiadomić o tych innych widokach ruchu paska przewijania? Jeśli tak, to jaki obiekt powinien zostać wywołany przez Foo i wysłuchany przez inne widoki?
Są to zmiany czysto wizualne i nie ma modelu, który by je wspierał.
Odpowiedzi:
3 dla odpowiedzi № 1używałbym wydarzeń w tym przypadku
weź ten przykład:
NavigationView = Backbone.View.extend({
initialize: function(options){
options.events.bind("navigation:change", this.changeNavigation);
this.render();
},
changeNavigation: function(key){
$(".menuItem", $(this.el)).removeClass("active");
$(".menuItem", $(this.el)).filter("." + key).addClass("active");
},
render: function(){
// rendering goes on here....
}
});
UserListView = Backbone.View.extend({
initialize: function(options){
options.events.trigger("navigation:change", "users");
this.render();
},
render: function() {
// rendering goes on here....
}
});
// kickstart the application
var myEvents = _.extend({}, Backbone.Events);
var myNavigation = new NavigationView({events: myEvents});
// this is just a collection of users... i left it out as it is not really the point here...
var users = new UserList();
var myUserList = new UserListView({collection: users, events: myEvents});
gdybyś potrzebował więcej informacji na temat obu odnośników1 widok na inny lub zdarzenia, możesz również dobrze przyjrzeć się temu artykułowi Dericka Baileya, wyjaśnia powyższą metodę jako agregator zdarzeń i wymienia udokumentowany przykład, jak z nią pracować (i alternatywy). http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/