web-dev-qa-db-ja.com

バックボーンのネストされたコレクション内のモデルの特定の属性の変更をリッスンします

私は次のバックボーン構造を持っています:

_- 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)

(私にはうまくいきませんでした)

17
Yehia A.Salam

Backbone.DeepModel を見てください。どうやら、Orderを深い構造を持つ単一のモデルとして表現し、change:order_items.*.menu_items.*またはchange:order_items.menu_items.*のいずれかを聞くことができます。このソリューションでは、ネストされたリストの利点をBackbone.Collectionとして使用できないことに注意してください。良いトレードオフだと思いますが、マイレージは異なる場合があります

6