0

从这个 [EDIT] [ToDo's sample] 1,[/EDIT] 我可以通过 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
        });
      }
    );

  }
}),
4

1 回答 1

0

实际上,您链接的示例应该可以工作。您可能知道路由器 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():通过 URL 输入路由时调用一次。这应该返回您的模型,它应该成为您的控制器的内容。
  • setupController():在这里你可以获取你的控制器并设置你喜欢的内容。默认实现设置控制器,即与您的路由匹配的名称与模型()的结果。
  • renderTemplate():在这个钩子中,你应该使用路由的新渲染方法来进行渲染。render方法在某种程度上是最匹配旧的 connectOutlets 的方法。还有默认实现。因此它也没有在 todomvc 的 pre4 版本中实现。

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

于 2013-03-09T18:45:46.010 回答