私は次のバックボーン構造を持っています:
_- collection[order_items]
- collection[menu_items]
- price
- quantity
_
数量属性の変更をリッスンしたいのですが、
_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"));
}
});
_
しかし、マリオネットまたはバックボーンには、親コレクションをループして各子コレクションにリスナーを追加する代わりに、より良い方法がありますか?
this.listenTo(this.order_collection, "change:menu_items:quantity", this.on OrderItemsChanged)
(私にはうまくいきませんでした)
Backbone.DeepModel を見てください。どうやら、Orderを深い構造を持つ単一のモデルとして表現し、change:order_items.*.menu_items.*
またはchange:order_items.menu_items.*
のいずれかを聞くことができます。このソリューションでは、ネストされたリストの利点をBackbone.Collectionとして使用できないことに注意してください。良いトレードオフだと思いますが、マイレージは異なる場合があります