0
IM有一些麻煩,下面的代碼裏面功能:JS&EXT JS:功能範圍誤會
Ext.define('...controller...', {
extend: 'Ext.app.Controller',
init: function() {
...
},
crearLoginWindow:function(){
var loginWindow = Ext.create('Proto1.view.adminbd.LoginWindowBDView', {
itemId: 'loginwindow',
autoShow: true,
modal: true
});
Ext.ComponentQuery.query('#loginwindow > button[text="Cancelar"]')[0].on('click', function(){loginWindow.close()});
//Cant call 'enviarLogin' function if its inside 'crearLoginWindow'
Ext.ComponentQuery.query('#loginwindow > button[text="Conectar"]')[0].on('click', this.enviarLogin, this);
var enviarLogin = function(){
console.log('login')
}
}
});
我希望能夠調用「enviarLogin」內部「crearLoginWindow」的功能,但它拋出一個參考錯誤。如果該函數放置在「crearLoginWindow」之外,它將起作用。
作爲這兩條線的麻煩來源:
Ext.ComponentQuery.query('#loginwindow > button[text="Conectar"]')[0].on('click', this.enviarLogin, this);
var enviarLogin = function(){
console.log('login')
}
我已經嘗試了不同的範圍變體,如;
Ext.ComponentQuery.query('#loginwindow > button[text="Conectar"]')[0].on('click', this.crearLoginWindow.enviarLogin);
this.enviarLogin = function(){
console.log('login')
}
這是合理的什麼我想我明白瞭解範圍以及需要指定的函數所在的執行它的地方。
標識欣賞一個解決方案,因爲這個問題讓我的代碼很凌亂!
謝謝你,如果世界上沒有簡單的辦法把下面的功能,選項1似乎保持我的代碼更清晰,對於這件事情的最佳解決方案。 – vto
如果使用函數聲明而不是函數表達式,則可以使用下面的函數定義的選項1:'function enviarLogin(){...}' - 請參閱[this related question](http://stackoverflow.com/問題/ 336859/JavaScript的VAR-functionname功能-VS-功能functionname) – nrabinowitz
太好了,現在我可以把所有的「助手」,我想,也是我已經注意到,「子功能」是保持私有的'功能容器'。 – vto