2012-11-02 53 views
1

我似乎無法指定內部Route.connectOutlets方法的自定義控制器。 這個想法是我不想爲每個視圖創建空控制器,因爲我不相信這首先是正確的實現。 總之,如果我拿Gordon Hempton's example略在路由器的項目/項目路由代碼Ember.js路由與自定義控制器映射

item: Ember.Route.extend({ 
     route: '/:item_id', 
     connectOutlets: function(router, context) { 
     var item = router.getPath('itemsController.content').objectAt(context.item_id); 
     router.get('itemController').set('content', item); 
     router.get('applicationController').connectOutlet('item'); 
     } 
    }) 

更新到

item: Ember.Route.extend({ 
route: '/:item_id', 
connectOutlets: function (router, context) { 
    var item = router.getPath('itemsController.content').objectAt(context.item_id); 
    var applicationController = router.get('applicationController'); 
    applicationController.connectOutlet({ 
     viewClass: router.namespace.ItemView, 
     context: item, 
     controller: applicationController 
    }); 
    } 
}) 

項目選擇停止沒有任何錯誤的工作。 我在代碼中弄錯了什麼,或者有多個控制器視圖的情況只是不受支持?

UPD:

的ItemView控件模板如下:

<script type="text/x-handlebars" data-template-name="item"> 
    <h1>{{title}}</h1> 
    {{{description}}} 
</script> 

回答

0

您是否嘗試過使用相關的項目作爲您的控制器?這樣可以避免創建未使用的空控制器,並讓您的項目內容可供您查看。

applicationController.connectOutlet({ 
    viewClass: router.namespace.ItemView, 
    controller: item 
}); 
+0

在'applicationController.connectOutlet'前面加上'applicationController.set('content',item)''在刪除上下文參數之前'沒有幫助。 – achekh

+0

我指的是項目「var item = router.getPath('itemsController.content')。objectAt(context.item_id);」。嘗試將applicationController的插座的控制器設置爲該對象。操作applicationController並連接它自己的插座控制器似乎是你的問題。 – RhinoWalrus

+0

將connectOutlet調用更新爲'applicationController.connectOutlet({viewClass:router.namespace.ItemView,context:item,controller:router.get('itemsController')});'拋出錯誤「對象#沒有方法'addArrayObserver' 「 – achekh