Backbone JS:集合视图中表示模型的参数从哪里来?

Backbone JS: Where does parameter representing model in collection view come from?

我正在学习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表示一个对象,用于构造单个视图。但是这个参数是从哪里来的呢?

当然我知道它来自传递给这个视图的集合,但它怎么可以免费使用 – defined/documented 这个参数在哪里可用?

each 是 Underscore 的一种方法。它接受回调——当前接受 a 作为其参数的匿名函数。这个参数可以命名为任何东西,真的。它表示 我们在每个特定迭代中迭代的数组的特定元素 。为了清楚起见,我通常喜欢给它命名 elemvalue。更长的版本可能类似于 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);
}

再看看这一行:

this.collection.each(function(a) {

each 对集合中的每个模型调用一个函数。 a 被定义为该方法的第一个参数,将代表一个特定的模型。

您基本上是在询问 underscore 实用程序库中的 _.each 函数是如何工作的。

它遍历集合中的每个项目并将其传递给回调函数。在此代码中,您将集合中的每个项目设置为 App.Views.Task 的模型并将其附加到 UI 元素,然后返回元素。

underscore是Backbone的依赖,each的文档可以参考here.