javascript - Backbone - 模型数组到 JSON

标签 javascript backbone.js underscore.js

我知道有很多方法可以做到这一点...但为什么这种方法不起作用?

var selected = this.collection.where({checked: true});

var mapped = _.map(selected, Backbone.Model.prototype.toJSON.call);

this.$el.html(this.template(mapped));

错误是未捕获类型错误:未定义不是函数

有没有更简洁的方法?

编辑这做了我想要的......

var mapped = _.invoke(selected, Backbone.Model.prototype.toJSON);

编辑 2 @nikoshr 让它变得更好。

var mapped = _.invoke(selected, 'toJSON');

最佳答案

看看_.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])
Calls the method named by methodName on each value in the list.

适用于您的案例:

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>

关于javascript - Backbone - 模型数组到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18362138/

相关文章:

javascript - 使用 underscore.js 时 innerHTML 'each function' 与 js 文件 'each function'

javascript - 扩展函数

javascript - 服务器端渲染的 HTML -> JS 表?

javascript - JWT auth0 创建没有证书的 jwt

Chromium 中的 JavaScript 语法错误 : missing ) after argument list

javascript - 将 Backbone.js 路由器与 #!

javascript - 主干搜索(总是找不到)

javascript - 理解 _.bind 的代码

javascript - jQuery 自动完成焦点下一个控件

javascript - 如何从 jQuery 延迟传递参数