【问题标题】:Backbone.js View on TodoMVC: function and it's argument and how does it worksTodoMVC 上的 Backbone.js 视图:函数及其参数以及它是如何工作的
【发布时间】:2014-10-19 09:24:09
【问题描述】:

我正在通过示例 todomvc 应用程序从这里学习 Backbone.js: http://todomvc.com/architecture-examples/backbone/

我有点卡在 app-view.js 部分: https://github.com/tastejs/todomvc/blob/gh-pages/architecture-examples/backbone/js/views/app-view.js

这是代码的sn-p:

    // Add a single todo item to the list by creating a view for it, and
    // appending its element to the `<ul>`.
    addOne: function (todo) {
        var view = new app.TodoView({ model: todo });
        this.$list.append(view.render().el);
    },

函数“addOne”中的“todo”变量从何而来? 我搜索了整个项目文件,到目前为止没有找到任何指定或初始化“todo”变量的特定函数。 我试图在他们的网站上阅读 Backbone.js 和 Underscore.js 文档,但到目前为止还没有找到解释。

【问题讨论】:

  • 来自initialize: function() {... this.listenTo(app.todos, 'add', this.addOne); ...} app-view.js 第27行,同样'keypress #new-todo': 'createOnEnter'触发createOnEnter在集合中创建模型app.todos.create(this.newAttributes())

标签: javascript function backbone.js underscore.js todomvc


【解决方案1】:

好的,让@Evgeniy 说的内容更具可读性..

当您在集合上收听“添加”时,传递给监听方法的第一件事就是添加的模型:

this.listenTo(app.todos, 'add', this.addOne);

这是主干源代码中的一行:

(model = toAdd[i]).trigger('add', model, this, options);

所以你可以看到第一个参数是添加的模型,然后是集合,然后是从 this.collection.add(model, [options]) 传递的任何选项。

addAll 也在调用addOne - 它循环遍历所有模型并为它们一个接一个地添加视图:

app.todos.each(this.addOne, this);

在每种情况下,第一个参数都是需要为其添加视图的模型。

【讨论】:

  • @Evgeniy 所以,你是说这个函数:'this.listenTo(app.todos, 'add', this.addOne);'自动将参数传递给'addOne'函数,参数是集合的模型名称。对吗?
  • @AnzhariPurnomo 是的 - 它会自动传递刚刚添加到集合中的模型
  • 你能帮我一步步解释源代码吗?最好是关于这怎么可能的基本概念,所以下次我偶然发现类似的东西时,也许我可以尝试自己理解。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多