我正在尝试了解 Backbone.js 的 Todo 示例应用程序
虽然我了解其中的大部分内容,但有一部分我没有得到,并希望有人可以为我解释。
查看https://github.com/jeromegn/localtodos/blob/master/javascripts/todos.js
第 162 行:函数中的“todo”参数如何到达这里?我看不到它是如何发送的或从哪里发送的?
任何帮助将不胜感激,是的,现在我知道它在这个网站上的工作原理,我会相信很好的答案。
谢谢
我正在尝试了解 Backbone.js 的 Todo 示例应用程序
虽然我了解其中的大部分内容,但有一部分我没有得到,并希望有人可以为我解释。
查看https://github.com/jeromegn/localtodos/blob/master/javascripts/todos.js
第 162 行:函数中的“todo”参数如何到达这里?我看不到它是如何发送的或从哪里发送的?
任何帮助将不胜感激,是的,现在我知道它在这个网站上的工作原理,我会相信很好的答案。
谢谢
当一些代码调用该函数“addOne”时,它需要提供一个参数,该参数将在“addOne”函数中命名为“todo”。如果你注意到上面的'bind','addOne' 也会被调用来处理'add' 事件。如果您看下面,您会看到“addAll”,其中“each”每次调用“addOne”时都会提供一个元素
在该AppView.initialize
方法中,在第 146 行,该addOne
方法被注册为Todos
集合的添加事件的事件处理程序。
Todos.bind('add', this.addOne);
当一个项目被添加到集合中时,Backbone 触发add
事件,并将添加的模型作为第一个参数传递给事件处理程序。
根据内置事件列表,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 中声明完整的参数列表是不必要的,所以示例的作者选择只“接收”第一个参数。