2013-02-05 6 views
8

mam widok, który zajmuje collection jak poniżej:Binding wydarzenie zmiana Backbone przypisać model w kolekcji

MyView = Backbone.View.extend({ 
    initialize: function() { 
     this.collection.on("change://an attribute of a model in aCollectionToRender", someAction); 
    } 
}); 

var MyViewInstance = new MyView({ 
    collection: aCollectionToRender 
}); 

Zasadniczo nie chcę MyView do nasłuchiwania zmian na całą kolekcję, tylko pojedynczy atrybut modelu, który zawiera kolekcja.

Zdaję sobie sprawę, istnieje wiele alternatyw do tego:

  1. Tworzenie widoków dla każdego modelu aCollectionToRender i dołączyć .on("change") wydarzeń w tych widokach. Nie chcę tego robić, ponieważ nie jest to właściwe postępowanie w mojej sytuacji.
  2. Po prostu zdarzenie this.collection.on("change") i filtr obsługi zdarzeń na podstawie moich wymagań. Jest to mniej eleganckie i jeśli Backbone pozwala już na zapisywanie filtrów zdarzeń, o co pytałem powyżej, jest to duplikat kodu:

Zastanawiam się, czy istnieje sposób na zapisanie detektora zdarzeń, który już filtruje. To pytanie może być również duplikatem; Wyglądałem, ale nie znalazłem nic takiego, ale jest wiele pytań dotyczących kręgosłupa.

Odpowiedz

16

Może nie rozumiem twojego pytania, ale możesz zrobić dokładnie to, co pokazujesz. Sprawdź numer Backbone documentation.

MyView = Backbone.View.extend({ 
    initialize: function() { 
     this.collection.on("change:attributeName", this.someAction /*function to call*/, this); 
    }, 
    someAction: function(model, value, options){ 
    } 
}); 
+2

Doh! Myślę, że masz rację! Z jakiegoś powodu myślałem, że gdy jest to kolekcja, 'attributeName' w' change: attributeName' odnosi się do atrybutu kolekcji, a nie do modelu. – Jay

+1

ok, ale jak to zrobić: this.collection.on ("change", function (model, property) {// pobierz właściwość, która została tutaj zmieniona ...}); ??? –

Powiązane problemy