[英]Ember.js v1.0.0-rc.1 — How do I get/supply a controller for a programmatically created view?
我將我的應用程序從Ember v1.0.0 pre3遷移到rc1,看來我無法再獲取全局路由器實例,也無法在我手動創建的視圖中獲取控制器。
我有許多模態屏幕目前不使用路線(TODO),但在本周的截止日期之前,我只需要顯示和填充這些模態屏幕即可。
我正在創建如下的模態:
App.helpModalView = App.HelpModalView.create();
App.helpModalView.append();
並在視圖的didInsertElement方法中處理模式顯示:
didInsertElement: function() {
// miscellaneous setup operations
// ...
this.$().modal({backdrop:"static"});
},
但是在實際的視圖類中
this.get('controller') == null
檢查我的各種對象,看起來“ controllerFor”僅在路由器上可用,並且我以前從App.router.get('controllerName')獲取此信息。
如何從以編程方式創建的視圖中獲取控制器?
同樣,為我尚未訪問的視圖提供控制器的最佳方法是什么? 該項目在視圖層中包含大量令人尷尬的邏輯,我想將其推入關聯的控制器中。
我有一個類似的場景,並像這樣解決了它:
IB.TreeNavController = Em.Controller.extend({
container: IB.__container__,
init: function() {
this._super();
}
});
IB.TreeNavView = Em.View.extend({
templateName: 'treeNav',
init: function() {
this._super();
var ctrl = IB.TreeNavController.create();
this.set('controller', ctrl);
},
});
因此,我定義了一個在視圖的init()中實例化的Controller。 該視圖可以以編程方式實例化。 IB是此示例中應用程序的名稱。
當您渲染如下內容時:
this.render('treeNav', { controller: this.controllerFor('treeNav')};
this.controllerFor
可以是您想要的任何內容,甚至還可以是尚未分配給任何視圖的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.