簡體   English   中英

Ember.js v1.0.0-rc.1 —如何為以編程方式創建的視圖獲取/提供控制器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM