上的toJSON#Backbone.Collection哪里?(toJSON on Backbone

2019-07-29 09:06发布

我不知道为什么,但我不能得到这个工作。

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?

Answer 1:

什么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代码



Answer 2:

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方法。



文章来源: toJSON on Backbone.Collection#where?
标签: backbone.js