我使用BackBone关系作为Backbone.js的非常有用的扩展。
然而,在保存骨干关系模型与1-M关系之后,我遇到了一个问题。
我看到的问题是,在model.save()之后,对于集合中的每个相关模型,再次触发add :.这会导致我的视图出现问题,因为模型在主视图中第二次呈现。
我的主视图设置如下:
//master view
initialize: function(){
_.bindAll(this, 'render', 'renderRelated');
this.model.bind('change', this.render);
this.model.bind('add:related', this.renderRelated);
}
这在第一次加载和添加新的相关模型时效果很好。问题是,当在父模型上调用save时,即使模型具有ID等,也会为每个嵌套模型再次触发add:related
。似乎保存完全重新填充相关集合。
我想知道其他人是如何得到这个的?我在考虑:
对我来说,这看起来非常糟糕,效率非常低,并且会在删除子视图并再次添加时为最终用户带来闪烁效果。
作为其中的一部分,我也试图绑定到reset:related
但是在保存后似乎没有激发。
答案 0 :(得分:0)
我使用Backbone.Marionette视图,我遇到了类似的问题。这是如何解决它的:
initialize: function(){
this.bindTo(this.model, 'change', this.render);
this.bindTo(this.model.get('myrelated'), 'relational:add', this.render);
}
我认为在简单的Backbone中,这会转换为(未经测试):
initialize: function(){
_.bindAll(this, 'render', 'renderRelated');
this.model.bind('change', this.render);
this.model.get('myrelated').bind('relational:add', this.render);
}
请注意,如果您在保存时通过{wait: true}
,则relational:add
将被触发两次:一次是在保存之前由骨干创建临时模型,一次是保存成功时并创建实际模型。这是一个尚未解决的bug with Relational。