2

値が単純な属性であれば、バックボーン モデル.get()とルーチンは問題ありません。.set()ただし、値も JSON オブジェクトであるアプリを継承しました。

つまり、model.get("key")戻ります

{start:
    {top:5, bottom:6}, 
    end:{...}
 }

これらの値のいずれかを使用して設定すること.set()は PITA です。古い値を引き出し、必要な変更を行い、再度パントする必要があるためです。つまり、bottom= 7 が必要な場合は、単に行うことはできません.set("start.bottom",7)。私は次のようなことをする必要があります:

var tempValue = model.get("start");
tempValue.bottom = 7;
model.set("start",tempValue)

モデルには属性プロパティがあり、そこで実行できますmodel.attributes.start.bottom = 7。これはおそらくイベント ハンドラを起動しません。バックボーン コードを見ると、set.

2つの質問:

  • 変更ハンドラを起動する必要がない場合、属性を直接設定することに何か問題がありますか。
  • 属性を設定した後、手動で変更ハンドラを起動する方法はありますか?

バックボーンの変更ログには、「遅延属性の変更が利用できなくなったため、Model#change メソッドは削除されました」と記載されていますが、これがなぜなのかは完全にはわかりません。便利そうですね。

これに関連: HTML フォームをモデルに解析しようとしています。ModelBinder を使用しようとしていますが、ネストされた JSON を処理できません。例えば<input type="text" name="start.top">

model.set({})編集:オブジェクトでできることに気づきました。例:model.set({start :{top:7}});しかし、それは少し不格好です

4

1 に答える 1

2
  1. 変更ハンドラーを起動する必要がない場合、属性を直接設定することに何か問題がありますか。

これはあなたの質問に答えるかもしれないと思います: Backbone.jsはネストされたオブジェクト属性を取得して設定します

  1. 属性を設定した後、変更ハンドラーを手動で起動する方法はありますか?

このsetメソッド(サイレントオプションなし)は、「change」と「change:attributeName」の2つのイベントをトリガーします。

必要な場合は、次を呼び出すことで手動でトリガーできます。

model.trigger("change change:attributeName")
于 2013-03-13T13:32:55.633 に答える