我不知道为什么,但我不能得到这个工作。
var friends = new Backbone.Collection([
{name: "Athos", job: "Musketeer"},
{name: "Porthos", job: "Musketeer"},
{name: "Aramis", job: "Musketeer"},
{name: "d'Artagnan", job: "Guard"},
]);
friends.where({job: "Musketeer"}).toJSON()
我越来越Uncaught TypeError: Object [object Object] has no method 'toJSON'
。
我是我做错了,我怎么转换我收集过滤成JSON?
什么Underscore.where
方法返回的是一个Array
不是Backbone.Collection
所以它不是toJSON
定义的方法。
所以,你可以做两件事情:
遍历元素和映射的结果:
var result = friends.where({job: "Musketeer"});
_.map( result, function( model ){ return model.toJSON(); } );
的jsfiddle代码
实现返回正确的Backbone.Collection集合搜索方法:
var Friends = Backbone.Collection.extend({
search: function( opts ){
var result = this.where( opts );
var resultCollection = new Friends( result );
return resultCollection;
}
});
var myFriends = new Friends([
{name: "Athos", job: "Musketeer"},
{name: "Porthos", job: "Musketeer"},
{name: "Aramis", job: "Musketeer"},
{name: "d'Artagnan", job: "Guard"},
]);
myFriends.search({ job: "Musketeer" }).toJSON();
的jsfiddle代码
toJSON
是一个令人困惑的方法名称: http://documentcloud.github.com/backbone/#Collection-toJSON
的toJSON collection.toJSON()
返回包含集合中的每个模型的属性的散列数组。 这可以用来序列化和>坚持收集作为一个整体。 这种方法的名称有点混乱,因为它符合JavaScript的> JSON API。
如果您想将集合转换成JSON字符串,使用JSON.stringify
var friends = new Backbone.Collection([
{name: "Athos", job: "Musketeer"},
{name: "Porthos", job: "Musketeer"},
{name: "Aramis", job: "Musketeer"},
{name: "d'Artagnan", job: "Guard"},
]);
JSON.stringify( friends.where({job: "Musketeer"}) );
请注意, where
返回一个数组,而不是一个骨干集,你就必须建立一个新的集合使用toJSON
方法。