我将模型发送到模板。该模型有一个集合。在模板中,我回应了一些变量和函数:
console.log(comments);
console.log(_.size(comments));
console.log(comments instanceof App.Collections.Comments);
console.log(_.pluck(comments, 'created'));
_.each(comments, function(com) {
console.log(com);
});
前三个工作,但最后两个下划线功能不是。 Pluck给出了3x undefined,每次都没有迭代。
Object { length=3, models=[3], _byId={...}, more...}
3
true
[undefined, undefined, undefined]
如何让下划线功能起作用?
答案 0 :(得分:1)
你需要直接在集合上调用pluck,因为Collection类支持它:
http://documentcloud.github.com/backbone/#Collection-pluck
所以而不是:
_.pluck(comments, 'created')
你可以打电话:
comments.pluck('created');
答案 1 :(得分:1)
Backbone集合have some Underscore methods mixed in,因此您可以直接在集合实例上使用Underscore方法:
console.log(comments.pluck('created'));
comments.each(function(com) { console.log(com) });
演示:http://jsfiddle.net/ambiguous/3jRNX/
这一个:
console.log(_.size(comments));
可以正常使用,因为_.size
看起来像这样:
_.size = function(obj) {
return _.toArray(obj).length;
};
和_.toArray
调用集合的toArray
:
// Safely convert anything iterable into a real, live array.
_.toArray = function(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray();
if (_.isArray(iterable)) return slice.call(iterable);
if (_.isArguments(iterable)) return slice.call(iterable);
return _.values(iterable);
};
打开集合的数据以提供正确的长度。以上内容取自1.3.1源代码,current Github master version的_.size
具有不同的实现方式,因此您的_.size
调用可能会在升级期间中断。