_.map
バージョン 1.5.1 のソース コードを見てください。
_.map = _.collect = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results.push(iterator.call(context, value, index, list));
});
return results;
};
これは、 内の各オブジェクトについて、指定されていないコンテキストでselected
終了することを意味しBackbone.Model.prototype.toJSON.call.call
ます。これは、おそらく望んでいるものではありません。
toJSON
各モデルを呼び出す最も簡単な方法は、次を使用すること_.invoke
です。
invoke _.invoke(list, methodName, [*arguments])
リスト内の各値に対して methodName で指定されたメソッドを呼び出します。
あなたのケースに適用:
var mapped = _.invoke(selected, 'toJSON');
そしてデモ
var c = new Backbone.Collection([
{id: 1, checked: true},
{id: 2, checked: false},
{id: 3, checked: true}
]);
var selected = c.where({checked: true});
var mapped = _.invoke(selected, 'toJSON');
console.log(mapped);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>