2013-03-09 44 views
0

從這[編輯] [ToDo的示例] 1,[/編輯]我可以通過connectOutlet連接視圖。有使用RC1的更新示例嗎?在connectOutlet中用Ember連接視圖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

這似乎過時了。檢查[指南](http://emberjs.com/guides/) – MilkyWayJoe 2013-03-09 18:01:38

回答

0

其實example你連接應該工作。正如您可能知道路由器API已更改並且基於pre4的代碼仍應工作。我不知道爲託多斯應用程序的要求,所以我不能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()。

在鉤子上做一點解釋:

  • 模型():當通過URL輸入你的路線被調用一次。這應該返回你的模型,它應該成爲你的控制器的內容。
  • setupController():在這裏你可以得到你的控制器,並設置你的內容,你可能會喜歡。默認實現將控制器設置爲與model()的結果匹配的名稱。
  • renderTemplate():在這個鉤子內部,你應該使用路由的新渲染方法來進行渲染。 render方法在某種程度上是與舊的connectOutlets最匹配的方法。還有默認的實現。因此它也沒有在todomvc的pre4版本中實現。

正如Milkyway所說,你真的必須閱讀guides,但我希望這可以讓你開始更好一點。

+0

謝謝你的深思熟慮的答案。該樣本實際上已經過時(0.9.8.1)。我使用的代碼使用了相同的版本和模式,特別是關於將ItemsView分配給connectOutlets中的viewClass的部分。我已閱讀指南,並沒有提及等效功能。這個ToDo示例使用viewContainer,它包含一個View,它通過Views中的模板屬性來識別模板。有沒有類似的方式來使用某些東西從Route內部連接到viewContainer,類似於connectOutlets所做的事情? – user2146601 2013-03-09 20:37:42

+0

你甚至看過提供的鏈接嗎?這顯然是使用新的路由器API。正如我所說,沒有完美的等價物。如果您要查看Route的渲染方法的文檔,您會看到該界面非常接近控制器的舊connectOutlet。 – mavilein 2013-03-09 22:41:01

+0

對不起,我試圖引用使用requirejs的[ToDo的示例](https://github.com/tomdale/todomvc/tree/gh-pages/dependency-examples/emberjs_require/js)。此ToDo樣本仍舊過時到0.9.8.1。是的,我已閱讀所有Ember指南和鏈接,但他們沒有提及在connectOulet中設置視圖(viewClass:ItemsView,)的等價物。THANKs提前, – user2146601 2013-03-12 22:04:55