0

我正在尝试了解 Backbone.js 的 Todo 示例应用程序

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

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

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

任何帮助将不胜感激,是的,现在我知道它在这个网站上的工作原理,我会相信很好的答案。

谢谢

4

2 回答 2

2

当一些代码调用该函数“addOne”时,它需要提供一个参数,该参数将在“addOne”函数中命名为“todo”。如果你注意到上面的'bind','addOne' 也会被调用来处理'add' 事件。如果您看下面,您会看到“addAll”,其中“each”每次调用“addOne”时都会提供一个元素

于 2013-01-21T16:03:49.680 回答
2

在该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 中声明完整的参数列表是不必要的,所以示例的作者选择只“接收”第一个参数。

于 2013-01-21T16:06:33.530 回答