我正试图绕过Backbone.js的Todo示例应用程序
虽然我对大部分内容都了解,但有一部分我没有得到,并希望有人可以为我解释。
查看https://github.com/jeromegn/localtodos/blob/master/javascripts/todos.js
第162行:函数中的“todo”参数如何到达?我看不出它是如何发送的或从何处发送的?
任何帮助都会非常感激,是的,我会相信很好的答案现在我知道它在这个网站上的运作方式。
由于
答案 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 events,add
事件处理程序方法传递以下参数:
"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中声明完整的参数列表是不必要的,所以样本的作者只选择“接收”第一个参数。