Mam następującą strukturę szkieletową:słuchać określonych zmian atrybutów w modelu w zagnieżdżonych kolekcji w sieci szkieletowej
- collection[order_items]
- collection[menu_items]
- price
- quantity
i chcę słuchać o wszelkich zmianach w atrybucie ilości, mam to działa przez
var CheckoutView = Backbone.Marionette.ItemView.extend({
template: '#template-checkout',
initialize: function (options) {
this.order_collection = options.collection;
_(this.order_collection.models).each(function (element, index, list) {
this.listenTo(element.get("menu_items"), "change:quantity", this.onOrderItemsChanged);
}, this);
},
onOrderItemsChanged: function (model, val, options) {
console.log(model.get("name"));
}
});
Ale czy marionetka lub kręgosłup mają lepszy sposób to zrobić, zamiast pętli throught kolekcji nadrzędnej i dodanie słuchacza do każdej kolekcji dziecięcej, może coś podobnego
this.listenTo(this.order_collection, "change:menu_items:quantity", this.on OrderItemsChanged)
(który zrobił praca dla mnie)
Niestety, nie rozumiem, jak to działa. 'Collection.models' to surowy Array, a Array nie ma metody" on ". Czy czegoś brakuje? – ericsoco
@ericosoco ma rację, to nie działa i nie widzę jak to może działać. – dvdplm
Uzgodnione - myślę, że powinno to zostać zaktualizowane, aby było "this.order_collection.on" zamiast .models.on. –