モデルにJSONの配列であるデータと言うフィールドが含まれているモデルのコレクションがあります。
data [{x : 3, y:4}]
ここで、バックボーン コレクションのwhere関数を次のように使用します。
var model= coll.where ({
data : data
})
出力はありません。私が正しいことをしているのか、何かが欠けているのかわかりません。この解決策を教えてください
モデルにJSONの配列であるデータと言うフィールドが含まれているモデルのコレクションがあります。
data [{x : 3, y:4}]
ここで、バックボーン コレクションのwhere関数を次のように使用します。
var model= coll.where ({
data : data
})
出力はありません。私が正しいことをしているのか、何かが欠けているのかわかりません。この解決策を教えてください
どのように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
ます。