2013-03-07 110 views
2

我有一個視圖,它由一個路由加上一個關聯的控制器設置。 我可以跟蹤控制器創建的,但在 鑑於init()功能,當我這樣做:無法在初始化函數1.0.0rc中查看初始化函數

init: function() {     
    this._super();      
    console.log(this.get('controller')); 
} 

控制器是null。 如果我登記didInsertElement(),控制器已設置。 我認爲讓init()函數中的控制器已經很有用。 爲什麼不是這樣?

+0

yes..you無法初始化得到()函數 – thecodejack 2013-03-07 13:37:14

回答

2

這種情況,因爲當視圖被創建(= Ember對象)時init()被調用。某處Ember做了類似於以下的事情。然後你的init被調用。

var view = Ember.View.create({}); 

此時控制器未被分配。控制器稍後分配。大多數時候,這是你的路線。看看這個代碼渲染代碼路線:

function setupView(view, container, options) { 
    var defaultView = options.into ? 'view:default' : 'view:toplevel'; 

    view = view || container.lookup(defaultView); // the view gets created here and init gets called 

    if (!get(view, 'templateName')) { 
    set(view, 'template', options.template); 

    set(view, '_debugTemplateName', options.name); 
    } 

    set(view, 'renderedName', options.name); 
    set(view, 'controller', options.controller); // controller gets assigned to view 

    return view; 
} 

正如你所看到的,在第一視圖被實例化和事後控制器分配它。

爲什麼Ember會這麼做?這不是錯嗎? 您目前的理解是,總是有一個控制器與您的視圖相關聯。但情況並非總是如此。以{{view}}助手爲例。通常你用contextBinding來設置它。所以'控制器'屬性並不總是設置!

你應該怎麼做你的情況? 您沒有詳細說明您的要求,但您應該沒問題使用willInsertElement()掛鉤。這是元素在DOM之前。這應該是足夠早的訪問它,對吧?

+0

我的實際問題是相當艱難的,我張貼在這裏現在: http://stackoverflow.com/questions/15275955/realize-a-dynamic-master-細節情景中 - 視圖 - 在-餘燼-1-0-0rc – vanthome 2013-03-07 16:09:07