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
应该是一个简单的数据转换器,使用它的特定上下文使副作用成为一个坏主意。