1

null値を持つオブジェクトキーを生成できる残りのAPIがあります。
この null 値は、model.attributes には表示されません。

ここに例があります:

サーバーは、{id: 1, attr: "someValue"}または{id: 2, attr: null}

次のコードを実行すると、すべて問題ありません。

m = new MyModel({id: 1});
m.fetch();
m.get("attr"); // "bar";

m = new MyModel({id: 2});
m.fetch();
m.get("attr"); // undefined;

以下を実行すると、ビューのレンダリング機能に問題があります。
理由を理解するには、次のコードを見てください。

m = new MyModel({id: 1});
m.fetch({
    success: function () {
         m.get("attr"); // "bar";
    }
});

m = new MyModel({id: 2});
m.fetch({
    success: function () {
         m.get("attr"); // "bar"; // actually it should be undefined or null
    }
});

私の質問は次のとおりです
。1)なぜこの動作をするのですか?
2) どうすれば修正できますか?

4

3 に答える 3

1

わかりました...何が起こっているのかわかりました...最初の例では、var m を新しいモデル インスタンスに設定しています。2 番目の例では、m を新しいモデルにリセットするのではなく、id 値を設定するだけです。これはまだ最初のモデルです。そのため、「null」への変更は見られません。

于 2012-05-22T23:11:29.750 に答える
0

あなたが書くとき、あなたm.get("attr") = "bar";は意味しますかm.get("attr") == "bar";(二重に等しいことに注意してください)?そうでない場合、そのコードはおそらくあなたが思っていることをしません。

いずれの場合も、値を調べたときに、fetch()呼び出しがまだ完了していないことが問題である可能性があります。これを入力しているときに、「muが短すぎます」というコメントに記載されています。:)

于 2012-05-22T23:17:31.487 に答える
0

タイミングの問題があると思います。バックボーンfetchは基本的に次のようになります。

  1. RESTルート$.ajaxを使用してサーバーへの呼び出しを設定します。m.id
  2. AJAXサクセスハンドラーは返されたデータをparse渡し、その結果をに渡しsetます。

したがって、afetchはかなり遅延setし、属性値setを無視するような特別なことは何もしません。nullあなたの場合、は時間遅延fetchがあるはずです。m.set({id: 2, attr: null})

私はあなたがこれを見ていると思います:

  1. 呼び出しm.fetch()とAJAXリクエストが開始されます。
  2. あなたはあなたが期待しているm.get('attr')ものを見ても見えません。null
  3. AJAXリクエストが完了し、に変更m.get('attr')されnullます。

フェッチにハンドラーを追加successします。

m.fetch({ success: function(m) { ... });

そこに何m.get('attr')があるかを確認するか、イベントハンドラーをバインドしattrて変更を待ちます。

m.on('change:attr', function(m, attr) { ... });
m.fetch();

何が起こるか見てみましょう。

于 2012-05-22T23:25:57.587 に答える