1

ユーザーがメールを入力できる招待ダイアログを作成しています。現在、モデルでは、電子メールを保持するための配列を作成しています。

initialize : function() {
    this.model.set({
        invite_email_array : new Array()
    });
}

そして、次のようにビューでアイテムを追加/削除しています。

this.model.get('invite_email_array').push('email@domain.com');

次に問題は、モデルに電子メールを追加またはモデルから削除したときにバインダーがトリガーされないことです。これが私のバインダーです:

binder : function() {
          model.on("change:invite_email_array", onInviteEmailArrayChange() )
}

バインディングをトリガーすることができた唯一の方法は、更新を行うときに手動でトリガーすることでした。醜いハック

 this.model.trigger("change:invite_email_array");

電子メールのリストを維持し、追加/削除時にオブジェクトにバインドできるようにするためのより良い方法に関する提案はありますか?

ありがとう

4

1 に答える 1

2

あなたが与える例ではset、配列を直接変更することによってバイパスしています。変更をトリガーするには、新しい電子メールをプッシュしたset、変更されたアレイを実行する必要があります。効果のあるもの:

var arr = _.clone(this.model.get('invite_email_array'));
arr.push('email@domain.com');

this.model.set({ invite_email_array: arr });

ただし、配列を導入したらすぐに、ビューのデザインが実際にその意図を反映しているかどうかを検討する価値があるかもしれません。何かのコレクション(または配列)は、モデルまたはビューを単純化することを検討する時期であることを示すことがよくあります。単一の電子メールをそれ自体のビュー/モデルに割り当てるのは簡単すぎるように見えますが、一連の電子メールを「招待」ビューのコレクションとして追跡し、それに応じて変更を監視することは理にかなっています。

于 2012-07-21T20:28:59.413 に答える