Javascript 主干模型.save()终止与事件的所有绑定
我一直在一个新项目上使用,到目前为止我很喜欢它,但我遇到了一个我似乎无法回避的拦截器 在不解释我的整个域模型的情况下,我发现当您保存一个模型时,响应会从服务器返回并再次解析,从而创建新的子对象,从而破坏我以前对该对象的事件绑定 例如,如果我在从服务器返回时保存Javascript 主干模型.save()终止与事件的所有绑定,javascript,backbone.js,Javascript,Backbone.js,我一直在一个新项目上使用,到目前为止我很喜欢它,但我遇到了一个我似乎无法回避的拦截器 在不解释我的整个域模型的情况下,我发现当您保存一个模型时,响应会从服务器返回并再次解析,从而创建新的子对象,从而破坏我以前对该对象的事件绑定 例如,如果我在从服务器返回时保存ContentCollection(它是一个主干.Model而不是一个集合),响应将被解析并在this.contentItems中创建一个新集合,这将断开我对this.contentItems的所有绑定。有没有办法绕过这个问题?告诉主干网不
ContentCollection
(它是一个主干.Model而不是一个集合),响应将被解析并在this.contentItems
中创建一个新集合,这将断开我对this.contentItems
的所有绑定。有没有办法绕过这个问题?告诉主干网不要以某种方式解析响应?从原始列表中获取绑定,然后将其重新附加到新列表
App.ContentCollection = Backbone.Model.extend({
urlRoot: '/collection',
initialize: function() {
},
parse: function(resp, xhr) {
this.contentItems = new App.ContentList(resp.items)
this.subscriptions = new App.SubscriptionList(resp.subscriptions)
return resp
},
remove: function(model){
this.contentItems.remove(model)
this.save({'removeContentId':model.attributes.id})
},
setPrimaryContent: function(model){
this.save({'setPrimaryContent':model.attributes.id})
}
})
以前有人遇到过这种情况吗?我认为这里的问题是您使用
parse()
方法的方式。主干网只希望此方法接受服务器响应并返回属性散列,而不是以任何方式更改对象。所以主干在save()
中调用this.parse()
,不希望有任何副作用-但是您重写.parse()
的方式是,在调用函数时更改模型
我过去处理这个用例的方法是在第一次调用fetch()
时初始化集合,类似于:
App.ContentCollection = Backbone.Model.extend({
initialize: function() {
this.bind('change', initCollections, this);
},
initCollections: function() {
this.contentItems = new App.ContentList(resp.items);
this.subscriptions = new App.SubscriptionList(resp.subscriptions);
// now you probably want to unbind it,
// so it only gets called once
this.unbind('change', initCollections, this)
},
// etc
});
parse
由fetch
调用,fetch
在调用parse
后执行reset
)。恭喜你在几个小时内就可以拿到backbone.js brown。@muistooshort-在这种情况下,parse
预计不会产生副作用(我想我们在这里达成一致)。谢谢!是的,我们同意,parse
应该是一个简单的数据转换器,使用它的特定上下文使副作用成为一个坏主意。