将connectOutlet中的视图与Ember RC1连接

时间:2013-03-09 14:42:46

标签: ember.js

从[编辑] [待办事项] 1,[/编辑]我可以通过connectOutlet连接一个视图。是否有使用RC1的更新示例?

index: Ember.Route.extend({
  route: '/',
  connectOutlets: function( router ) {

    var controller = router.get( 'applicationController' );
    var context = controller.namespace.entriesController;
    context.set( 'filterBy', '' );

    // This require was left here exclusively for design purposes
    // Loads decoupled controller/view based on current route
    require([ 'app/controllers/todos', 'app/views/items' ],
      function( TodosController, ItemsView ) {
        controller.connectOutlet({
          viewClass: ItemsView,
          controller: TodosController.create(),
          context: context
        });
      }
    );

  }
}),

1 个答案:

答案 0 :(得分:0)

实际上,您链接的example应该有效。您可能知道路由器API已更改,基于pre4的代码仍然可以正常工作。我不知道Todos应用程序的要求,所以我不能100%告诉它,如果它仍然有效:

Todos.Router.map(function() {
  this.resource('todos', { path: '/' }, function() {
    this.route('active');
    this.route('completed');
  });
});

Todos.TodosRoute = Ember.Route.extend({
  model: function() {
    return Todos.Todo.find();
  }
});

Todos.TodosIndexRoute = Ember.Route.extend({
  setupController: function() {
    var todos = Todos.Todo.find();
    this.controllerFor('todos').set('filteredTodos', todos);
  }
});

这里有一些对旧路由器API的更改摘要:

  • 您不再扩展Ember.Router类。
  • URL映射不再驻留在路由中。这是通过Todos.Router.map。
  • 完成的
  • 您的路线中不再有connectOutlets事件。相反,您可以实现3个事件:model(),setupController()& renderTemplate()。

关于钩子的一点解释:

  • model():当您通过网址输入路线时,系统会调用一次。这应该返回你的模型,它应该成为你的控制器的内容。
  • setupController():在这里,您可以获取控制器并根据自己的喜好设置其内容。默认实现设置控制器,即名称与您的路由匹配到model()的结果。
  • renderTemplate():在此钩子中,您应该使用新的路径渲染方法来进行渲染。 render方法在某种程度上是与旧的connectOutlets最匹配的方法。还有默认实现。因此,它也没有在todomvc的pre4版本中实现。

正如Milkyway所说,你真的必须阅读guides,但我希望这会让你开始好一点。