0

モデルにJSONの配列であるデータと言うフィールドが含まれているモデルのコレクションがあります。

data [{x : 3, y:4}]

ここで、バックボーン コレクションのwhere関数を次のように使用します。

var model= coll.where ({
data : data
})

出力はありません。私が正しいことをしているのか、何かが欠けているのかわかりません。この解決策を教えてください

4

1 に答える 1

1

どのようにwhere機能するかを見ると:

where: function(attrs, first) {
  if (_.isEmpty(attrs)) return first ? void 0 : [];
  return this[first ? 'find' : 'filter'](function(model) {
    for (var key in attrs) {
      if (attrs[key] !== model.get(key)) return false;
    }
    return true;
  });
}

モデルをスキャンし、 を使用して属性を比較するだけであることがわかります!==!==or ===(さらに言えば!=or )を使用==して配列を比較すると、内容ではなく参照が比較されます。たとえば、これは誤りです。

[1] === [1]

その結果、 を使用した配列の検索はwhereうまく機能せずwhere、単純なスカラー値を検索するためのショートカットを意図しています。

配列を検索する必要がある場合は、filter直接使用でき、_.isEqual比較に役立ちます。

var models = coll.filter(function(m) {
    return _.isEqual(m.get('a'), data);
});

1 つの一致が必要な場合は、find代わりに を使用しfilterます。

デモ: http://jsfiddle.net/ambiguous/PZZv4/1/

于 2013-07-23T18:43:31.563 に答える