Backbone.js和Todo示例应用程序

时间:2013-01-21 15:58:09

标签: javascript backbone.js

我正试图绕过Backbone.js的Todo示例应用程序

虽然我对大部分内容都了解,但有一部分我没有得到,并希望有人可以为我解释。

查看https://github.com/jeromegn/localtodos/blob/master/javascripts/todos.js

第162行:函数中的“todo”参数如何到达?我看不出它是如何发送的或从何处发送的?

任何帮助都会非常感激,是的,我会相信很好的答案现在我知道它在这个网站上的运作方式。

由于

2 个答案:

答案 0 :(得分:2)

当某些代码调用该函数时,'addOne',它需要提供一个参数,该参数将在'addOne'函数中命名为'todo'。如果您注意到上面的“绑定”,则还会为“添加”事件调用“addOne”。如果你看下面的话,你会看到'addAll',每次'each'将在每次调用'addOne'时提供一个元素

答案 1 :(得分:2)

AppView.initialize方法的第146行,addOne方法被注册为Todos集合的添加事件的事件处理程序。

Todos.bind('add', this.addOne);

当一个项目被添加到集合中时,Backbone会触发add事件,并将添加的模型作为第一个参数传递给事件处理程序。

根据list of built-in eventsadd事件处理程序方法传递以下参数:

"add" (model, collection, options) — when a model is added to a collection.

这意味着addOne方法还可以再接收两个参数:

addOne: function(todo, todoscollection, options) {
    console.log(todo); // -> the model which was added
    console.log(todoscollection); // -> the collection, to which the model was added
    console.log(options); // -> the original options argument passed to collection.add
}

但是因为在Javascript中声明完整的参数列表是不必要的,所以样本的作者只选择“接收”第一个参数。