2014-01-17 74 views
1

我剛分配了一個被解僱的extjs開發人員的項目。在他提出的控制器,我發現像如何創建getter和setter

this.getMyButton().toggle(true); 
this.getMyContainer().getLayout()... 

通話所以,我只是增加了一個新的形式向視圖(我的前同事應該有在聖誕節完成的事情之一),並試圖從調用它控制器使用

this.getMyNewForm().loadRecord(someStore.getAt(0)); 

和Chrome告訴我this.getMyNewForm()是未定義的。但代碼中沒有找到getMyButton()的定義。

這是怎麼回事?我如何定義getMyNewForm()

編輯:問題的文檔(http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-cfg-refs)回答,但問題仍然開放。

裁判在控制器正確定義:

refs: [{ 
    ref  :'MyNewForm', 
    selector :'form[id=myNewForm]' 
}] 

和MyNewForm鑑於

items: [{ 
     xtype: 'form', 
     header:false, 
     frame:false, 
     id:'myNewForm', 
     items: [{ 

正確定義的,但是當我打電話

init: function() { 
    this.control({ 
    }); 
    this.getMyNewForm().loadRecord(someStore.getAt(0)); 
}, 
+0

首先,你應該研究已經存在而不是已經存在的東西,以及如何實施。 – Don

+1

你說得太早。在呈現任何視圖之前調用控制器的'init'。 –

+0

@EvanTrimboli Thx!我把調用放到window.afterrender中,現在它可以工作。你是否介意回答這個問題,所以我可以將問題標記爲答案? :) – Alexander

回答

0

由於埃文Trimboli沒有做它的答案,讓我來做。

「你太早稱其爲初始化控制器被調用之前任何視圖都被渲染。「

0

你應該定義它不工作該方法在您的控制器的構造函數的原型上。 JavaScript引擎呻吟只是因爲你還沒有定義getMyNewForm方法;這不是魔術,你不能隨便調用一個方法。

你說getMyButton方法在代碼中沒有。那麼,這根本不可能。有可能是這種情況,有一種繼承層次,你的控制器只是從一個構造函數繼承而來,該構造函數在其原型上定義了該方法。

裸記住,即使你定義getMyNewForm emthod,你應該返回定義loadRecord方法的「類」的一個實例;這也許可能是一個ExtJS的具體的「類」

+0

我剛剛發現它在文檔中,它是魔術:http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-cfg-refs,但我的問題是尚未解決。我現在定義了ref,但該方法仍然不可用。 – Alexander

+0

這不是魔術!這就是JavaScript的動態本質 – ppoliani

+0

你能否說出chrome dev工具顯示的異常? – ppoliani