Backbone.js 主干关系存储火灾添加:<;键>;即使模型已经存在

Backbone.js 主干关系存储火灾添加:<;键>;即使模型已经存在,backbone.js,backbone-relational,Backbone.js,Backbone Relational,我使用关系主干作为BackBone.js的非常有用的扩展 然而,在使用1-M关系保存主干关系模型之后,我遇到了一个问题 我看到的问题是,在model.save()之后,集合中的每个相关模型都会再次触发add:。这会导致“我的视图”出现问题,因为模型将在主视图中进行第二次渲染 我的主视图设置如下: //master view initialize: function(){ _.bindAll(this, 'render', 'renderRelated'); this.mo

我使用关系主干作为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
。save似乎会完全重新填充相关集合

我想知道其他人是怎么做到的?我在考虑:

  • 将嵌套视图附着到每个相关模型
  • 绑定rm:与将从主视图中删除视图的方法相关
  • 对我来说,这似乎很有问题,效率很低,当子视图被删除并再次添加时,会对最终用户造成闪烁效果


    作为这项工作的一部分,我还尝试绑定到
    重置:相关的
    ,但似乎在保存后不会触发。

    我使用主干.木偶视图,我遇到了类似的问题。这就是解决问题的方法:

    initialize: function(){
       this.bindTo(this.model, 'change', this.render);
       this.bindTo(this.model.get('myrelated'), 'relational:add', this.render);
    }
    
    我认为,在普通主干中,这意味着(未经测试):


    请注意,如果您在保存时通过
    {wait:true}
    ,则
    关系:add
    将触发两次:一次是在保存之前由主干创建临时模型时,一次是在保存成功并创建实际模型时。这是一个尚未解决的问题。

    我使用主干。木偶视图,我有一个类似的问题。这就是解决问题的方法:

    initialize: function(){
       this.bindTo(this.model, 'change', this.render);
       this.bindTo(this.model.get('myrelated'), 'relational:add', this.render);
    }
    
    我认为,在普通主干中,这意味着(未经测试):


    请注意,如果您在保存时通过
    {wait:true}
    ,则
    关系:add
    将触发两次:一次是在保存之前由主干创建临时模型时,一次是在保存成功并创建实际模型时。这是一个尚未解决的问题。

    Conor,我知道这是一个老问题,但你有没有想出解决这个问题的办法?我也经历了同样的事情,@Tony的回答对我的情况没有帮助。现在看看代码,我们最终的做法是绑定到sync this.model.bind('sync',this.render'),而根本不使用add:related,取而代之的是一个addRelated,renderRelated方法,它可以在我们需要时完成工作。基本上是手动完成的,不能依赖add:related。因此,在parent render()方法中,我们循环每个相关的函数,并通过renderRelated()方法进行渲染。希望能有帮助。康纳,我知道这很古老,但你有没有想出解决这个问题的办法?我也经历了同样的事情,@Tony的回答对我的情况没有帮助。现在看看代码,我们最终的做法是绑定到sync this.model.bind('sync',this.render'),而根本不使用add:related,取而代之的是一个addRelated,renderRelated方法,它可以在我们需要时完成工作。基本上是手动完成的,不能依赖add:related。因此,在parent render()方法中,我们循环每个相关的函数,并通过renderRelated()方法进行渲染。希望有帮助。