因此,我將此子模型與我的視圖的1個列表項關聯,當我編輯此模型時,視圖被正確呈現。子模型更改事件不會傳播到主幹模型中的父模型
但我也當了完整的列表模式的改變,並且改變事件不是在aprent水平,這是奇怪的射擊其他的事情做父母,
如果我手動火model.change()我見從子模型更新的內容(即有效更改的父模型)。
是否有一種自動方式將更改事件傳播到父模型?
因此,我將此子模型與我的視圖的1個列表項關聯,當我編輯此模型時,視圖被正確呈現。子模型更改事件不會傳播到主幹模型中的父模型
但我也當了完整的列表模式的改變,並且改變事件不是在aprent水平,這是奇怪的射擊其他的事情做父母,
如果我手動火model.change()我見從子模型更新的內容(即有效更改的父模型)。
是否有一種自動方式將更改事件傳播到父模型?
您的「父母」是子模型所屬的集合嗎?如果是這樣,則只要子模型的屬性發生更改,集合就會收到更改通知。以下是一個演示模型/收集變化事件的例子:
var Product = Backbone.Model.extend({});
var Products = Backbone.Collection.extend({
model: Product
});
var ProductsView = Backbone.View.extend({
initialize: function() {
this.collection.bind('change', this.onProductChange, this);
},
onProductChange: function (product) {
console.log('product with ID ' + product.get('id') + ' changed to ' + product.get('name'));
}
});
var products = new Products([{ id: 1, name: 'Book' }, { id: 2, name: 'Toy' }, { id: 3, name: 'Shirt'}]);
new ProductsView({collection:products});
products.get(1).set({ name: 'TV' }); // console: product with ID 1 changed to TV
在另一方面,如果你的「父母」是不是你的子模型的集合,只是有一個父/子關係,然後骨幹有沒辦法瞭解關係,所以每當孩子發生變化時,您都需要觸發家長的變更事件。例如:
var Parent = Backbone.Model.extend({
includeChild: function (child) {
child.bind('change', this.onChildChange, this);
},
onChildChange: function (child) {
console.log('Child with name ' + child.get('name') + ' changed.');
}
});
var Child = Backbone.Model.extend({});
var parent = new Parent();
var child = new Child({ name: 'Bob', parent: parent });
parent.includeChild(child);
child.set({name: 'Joe'}); // console: Child with name Joe changed.
這裏的骨幹事件的完整列表:http://documentcloud.github.com/backbone/#FAQ-events
我喜歡JohnnyO的解決方案,我已經用自己的解決方案,以通用的「超級名模」類中我的應用程序。下面是這個類,它允許兒童模特的登記與父母的CoffeeScript的版本並自動傳播的所有事件:
class Model.SuperModel extends Backbone.Model
includeChild: (id, model) ->
@set id, model
@listenTo model, 'all', @trigger
就是這樣。使用它很容易:
parent = new Model.SuperModel()
parent.includeChild('child', new Backbone.Model())
view = new Backbone.View()
view.listenTo(parent, 'change', -> console.log "parent changed!")
parent.get('child').set('foo', 'bar')
這將打印出「父母改變」,如你所料。
您能否提供一些代碼示例,說明您現在如何設置以及如何使其工作? –