骨干关系保存火灾添加:<key>即使模型已经存在</key>

时间:2012-08-23 11:13:27

标签: backbone.js backbone-relational

我使用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。似乎保存完全重新填充相关集合。

我想知道其他人是如何得到这个的?我在考虑:

  1. 将嵌套视图附加到每个相关模型
  2. bind rm:与将从主视图中删除视图的方法相关
  3. 对我来说,这看起来非常糟糕,效率非常低,并且会在删除子视图并再次添加时为最终用户带来闪烁效果。

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

1 个答案:

答案 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