我正在学习Backbone JS。虽然到目前为止我觉得我做了很好的过程,但有一点我不明白。
采取以下集合视图:
App.Views.Tasks = Backbone.View.extend({
tagName: 'ul',
render: function() {
this.collection.each(function(a) {
var taskView = new App.Views.Task({model: a});
this.$el.append(taskView.render().el);
}, this);
return this;
}
});
在那里,参数a
表示用于构造单个视图的对象。但是这个参数来自哪里?
当然我知道它来自传递给这个视图的集合,但它是如何免费提供的 - 在哪里定义/记录了这个参数是否可用?
答案 0 :(得分:2)
您基本上是在询问underscore
实用程序库中_.each
函数的工作原理。
迭代集合中的每个项目并将其传递给回调函数。在此代码中,您将集合中的每个项目设置为App.Views.Task
的模型,并将其附加到UI元素,然后返回元素。
underscore
是Backbone的依赖项,可以找到each
的文档here。
答案 1 :(得分:0)
each
是来自Underscore的方法。它接受一个回调 - 当前以a
为参数的匿名函数。这个参数可以命名为任何东西。它代表我们在每次特定迭代时迭代的数组的特定元素。为了清楚起见,我通常喜欢将其命名为elem
或value
。较长的版本可能类似于TheElementOfThisCollectionWeAreCurrentlyIteratingOver
。
如果您使用for循环,您的代码将如下所示:
for (var i = 0; i < this.collection.length; i++) {
var taskView = new App.Views.Task({model: this.collection[i]});
this.$el.append(taskView.render().el);
}
答案 2 :(得分:0)
再看看这一行:
this.collection.each(function(a) {
each
针对集合中的每个模型调用一个函数。 a
被定义为方法的第一个参数,将代表特定的模型。