主干关系保存火力添加:<key>即使模型已经存在



我使用BackBone relational作为BackBone.js.的非常有用的扩展

然而,在保存了一个具有1M关系的主干关系模型之后,我遇到了一个问题。

我看到的问题是,在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。看起来save完全重新填充了相关集合。

我想知道其他人是怎么绕过这件事的?我在考虑:

  1. 将嵌套视图附着到每个相关模型
  2. bind-rm:与将从主视图中删除视图的方法相关

这对我来说似乎很棘手,效率很低,并且会在删除和再次添加子视图时给最终用户带来闪烁效果。

作为其中的一部分,我还试图绑定到reset:related,但在保存后似乎没有触发。

我使用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将被激发两次:一次是在保存前由主干创建临时模型时,另一次是保存成功并创建实际模型时。这是Relational的一个尚未解决的错误。

相关内容

  • 没有找到相关文章

最新更新