将控制器传递给Ember路由renderTemplate挂钩中的this.render

时间:2014-06-04 10:25:53

标签: ember.js

这是关于Ember基本原理的问题。

让我们从官方Ember入门指南的Transitioning to Show Only Incomplete Todos步骤考虑以下代码。

Todos.TodosActiveRoute = Ember.Route.extend({
  model: function(){
    return this.store.filter('todo', function(todo) {
      return !todo.get('isCompleted');
    });
  },
  renderTemplate: function(controller) {
    this.render('todos/index', {controller: controller});
  }
});

this.render将传递的对象controller定义为其控制器。这是有道理的,但是......为什么?

如果我们只使用模板名称参数调用this.render,那么应用程序(似乎)可以工作:

  renderTemplate: function(controller) {
    this.render('todos/index');
  }

renderTemplate文档声明它默认使用路由控制器,并且其controller参数也设置为路由的控制器。教程中的模式似乎明确声明了默认行为。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

有三种可能的原因,

  1. 当编写指南时,当没有指定控制器时,它没有应用路由的控制器
  2. 撰写该指南的人并未意识到路线的控制器将在未指定的情况下应用
  3. 他们想详细说明他们正在使用控制器来娱乐它
  4. Trek于2013年3月16日做了https://github.com/emberjs/website/commit/0f2af23799ee2ba3c643303fb96e8b72026f8e7f#diff-750a8e7208fb50dc62974ff56234d69e

    看起来这个功能是由nragaz于2013年1月10日添加的 https://github.com/emberjs/ember.js/commit/dbe5b4fbcb26fc030cd4fb9fa5ae586217f20a4e

    所以看起来我错了#1,而且可能是#2。