2

我使用 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);
}

这在首次加载和添加新的相关模型时效果很好。问题是,当在父模型上调用 saveadd:related时,即使模型具有 ID 等,也会为每个嵌套模型再次触发。似乎 save 完全重新填充了相关集合。

我想知道其他人是如何解决这个问题的?我在考虑:

  1. 将嵌套视图附加到每个相关模型
  2. 绑定 rm:与将视图从主视图中移除的方法相关

这对我来说似乎很hacky,效率非常低,并且会在删除并再次添加子视图时对最终用户造成闪烁效果。

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

4

1 回答 1

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则将触发两次:一次是在保存之前由主干创建临时模型时,一次是在保存成功并创建实际模型时。这是一个尚未解决的关系错误。

于 2012-08-24T16:42:51.010 回答