2

Backbone.js の非常に便利な拡張機能として BackBone リレーショナルを使用しています。

しかし、バックボーン リレーショナル モデルを 1 - M 関係で保存した後に問題が発生しました。

私が見ている問題は、model.save() の後、コレクション内の関連するすべてのモデルに対して add: がもう一度起動されることです。これにより、モデルがマスター ビューで 2 回目にレンダリングされるため、ビューに問題が発生します。

私のマスタービューは次のように設定されています:

 //master view
 initialize: function(){
     _.bindAll(this, 'render', 'renderRelated');
     this.model.bind('change', this.render);
     this.model.bind('add:related', this.renderRelated);
}

これは、最初の読み込み時と、新しい関連モデルを追加するときにうまく機能します。問題は、親モデルで save が呼び出されるとadd:related、モデルに ID などがある場合でも、ネストされたモデルごとに再度起動されることです。保存により、関連するコレクションが完全に再作成されるようです。

他の人はどうやってこれを回避したのだろうか?私は考えていました:

  1. ネストされたビューを関連する各モデルにアタッチする
  2. bind rm:related は、マスター ビューからビューを削除するメソッドに関連します。

これは私にはかなりハッキリしているようで、非常に非効率的であり、サブビューが削除されて再度追加されると、エンドユーザーにフラッシュ効果が発生します。

この一環として、私もにバインドしようとしていました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);
}

プレーンなバックボーンでは、これは (未テスト) に変換されると思います:

initialize: function(){
    _.bindAll(this, 'render', 'renderRelated');
    this.model.bind('change', this.render);
    this.model.get('myrelated').bind('relational:add', this.render);
}

{wait: true}保存時にパスした場合、 は 2 回起動されることに注意してくださいrelational:add。1 回目は保存前にバックボーンによって一時モデルが作成されたとき、もう 1 回は保存が成功して実際のモデルが作成されたときです。これは、まだ解決されていないリレーショナルのバグです。

于 2012-08-24T16:42:51.010 に答える