Backbone JS:集合视图中表示模型的参数来自何处?

时间:2015-05-28 18:32:43

标签: javascript backbone.js

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

当然我知道它来自传递给这个视图的集合,但它是如何免费提供的 - 在哪里定义/记录了这个参数是否可用?

3 个答案:

答案 0 :(得分:2)

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

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

underscore是Backbone的依赖项,可以找到each的文档here

答案 1 :(得分:0)

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);
}

答案 2 :(得分:0)

再看看这一行:

this.collection.each(function(a) {

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