[英]Using Bindings with the EmberJS Router?
我正在使用Ember.Router,我不知道的一件事是如何將對象綁定到Router實例化的控制器。
例如,這是一個控制器類(擴展的),路由器將為特定的路由(“頁面”)實例化該類,以及一個控制器對象(創建的),例如來處理應用程序外部的用戶管理任務路由器:
// controller used by Router to render the "page" route
App.PageController = Em.ObjectController.extend({
content: Em.Object.extend({
foo: 'bar'
})
});
// global controller for users
App.usersController = Em.ObjectController.extend({
content: Em.Object.extend({
fooBinding: App.PageController.foo
// the above will not work since Em.Router
// instantiates the page controller dynamically
})
});
因此,當路由器加載時,它將實例化App.PageController到App.router.pageController中,但這是在App.usersController已創建之后。 那么App.usersController如何在路由器管理的控制器中訪問數據?
有任何想法嗎?
您的樣本中有一些錯誤。
首先,永遠不要在聲明時直接使用Object值設置屬性:該值將在類的所有實例之間共享。 在這里,這並不重要 ,但這是一個壞習慣。 在這種情況下,設置PageController內容的好方法是在connectOutlet
調用connectOutlet
其綁定到路由器,如下所示:
connectOutlets: function (router) {
var theContainerController = router.get('theContainerController'),
objectWithFooBar = Ember.Object.create({
foo: 'bar'
});
theContainerController.connectOutlet('page', objectWithFooBar);
}
第二個錯誤是usersController
的命名:它應該是UsersController
,因為它是一個類, usersController
在initialize
調用期間作為usersController
注入到路由器中。 讓用戶使用多元化和ObjectController似乎也很奇怪。 當然應該單數化...
最后,當然是最有趣的問題了,一旦您應用了前面的備注,就可以使用以下命令設置綁定:
App.UserController = Em.ObjectController.extend({
fooBinding: 'App.router.pageController.foo'
});
App.router
可以成為你調用之前建立App.initialize
。 讓UserController
使用全局符號直接訪問PageController
絕對是很糟糕的選擇,但是在您的情況下,它確實可以完成工作。
一個絕對更好的解決方案也是將UserController
connectOutlet
的內容綁定在connectOutlet
調用中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.