2013-04-11 59 views
17

変更されていないデータを設定すると、変更イベントが発生せず、検証も行われないことは、backbone.jsの既知の機能です。しかし、バックエンド検証の結果を格納するAJAX呼び出しからのJSON応答を保存しているので、変更イベントが必要です。ユーザーが同じフィールドを空のままフォームを送信し続けると、バックエンドの検証によって同じJSON結果が返されます。モデルに保存すると、変更イベントがトリガーされません。値が変更されない場合のbackbone.jsの変更

私はモデルにデータを設定するAJAXの成功コールバックの中に試したいくつかのこと:

しようとしました溶液#1

t.model.unset('fieldErrors',{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

しようとしました溶液#2

t.model.set({fieldErrors: null},{silent: true}); 
t.model.set({fieldErrors: JSONResponse}); 

これらのどちらも、変更イベントが発生し、呼び出しが行われたときにユーザーが同じJSONResponseを持っていると2度目に発生しません。

+0

を使用すると、定型のを恐れていない場合は、ScottPuleoの回答を参照してください。それ以外の場合は、 'Model#set'メソッドをオーバーライドして常にカスタムイベントを発生させることができます(興味がある場合、私はどのように答えを投稿します)。 – Loamhoof

答えて

27

手動で変更イベントトリガー:

t.model.trigger('change', t.model); 

または

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue); 
+5

2番目のケース(ランダムオプションの)はおそらく決して使用されるべきではありません。 'trigger'メソッドはすべてここに必要です。バックボーンは、手動でトリガしたときに必要なパラメータを渡すことを忘れないでください。 –

+2

注:「その2番目のケース」とは、これ以降削除された古いケースを指します。 – Chris

+0

@Scott Puleoこれは古い質問ですが、モデルそのものを 'trigger 'の第2引数として渡す必要がある理由を説明できるかどうか疑問に思っていましたか?私がしなければ、 'Collection._onModelEvent'は - 後で呼ばれます - モデルを受け取りません。 'model.trigger( 'change')'は、後のイベントにモデルを転送するのに十分なはずです。それがなぜではないか知っていますか? (申し訳ありませんが私の質問が明確でない場合...) – arnaudrg

関連する問題