backbone.js - Backbone.Collection#where 上的 toJSON?

标签 backbone.js

我不知道为什么,但我不能让它工作。

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 code

实现一个返回正确 Backbone.Collection 的 Collection searcher 方法:
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 code

关于backbone.js - Backbone.Collection#where 上的 toJSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548685/

相关文章:

javascript - 无法使用backbone.js从mongodb数据库中删除记录

javascript - Jquery 选择层次结构

node.js - 主干 Node 不工作( headless TDD/开发)

javascript - 类型错误 : Cannot call method 'replace' of null - Backbone. js

javascript - backbonejs 入门——服务器应该返回什么

views - Backbone.js: View 之间的通信

javascript - 这些 Backbone/Underscore .bind() 方法有什么区别?

javascript - Backbone.js 为什么我必须使用下划线 (_.each) 来定位模型?

backbone.js - 使用Backbone.js的有选择性的history.back()

jquery - 添加元素主干后元素不存在