在我的SenchaTouch 2.3.1應用程序中,我爲用戶構建了一個登錄面板。它看起來像這樣:控制器引用不起作用
Ext.define('MyApp.view.LoginPanel', {
extend: 'Ext.form.Panel',
alias: 'widget.loginPanel',
requires: [
'Ext.form.FieldSet',
'Ext.field.Password',
'Ext.Button'
],
config: {
layout: 'vbox',
items: [
{
xtype: 'fieldset',
title: 'Business Login',
itemId: 'login',
items: [
{
xtype: 'emailfield',
itemId: 'email',
label: 'E-Mail',
name: 'email',
required: true
},
{
xtype: 'passwordfield',
itemId: 'password',
label: 'Passwort',
name: 'password',
required: true
}
]
},
{
xtype: 'button',
itemId: 'loginButton',
cls: 'button-blue',
text: 'Login'
},
{
xtype: 'panel',
itemId: 'loggedInPanel',
cls: 'logged-in-panel',
tpl: [
'Sie sind eingeloggt als {firstname} {lastname} (ID: {agentId})'
],
hidden: true,
margin: '10 0'
}
]
}
});
在我的控制,我想用這樣來此面板的引用:
config: {
refs: {
loginPanel: 'loginPanel',
navigationView: '#morenavigation',
loggedInPanel: '#loggedInPanel',
loginButton: '#loginButton'
}
}
在控制器的發射功能,我要檢查,如果用戶已經登錄,以顯示他的身份證和顯示一個註銷按鈕。但是當我嘗試獲得面板ref時,它是未定義的。但爲什麼?
launch: function() {
var me = this,
sessionInfo = Ext.getStore('SessionInfo');
console.log(me.getLoginPanel()); <-- undefined
if (null !== sessionInfo.getAt(0).get('sessionId')) {
me.successfullLogin(sessionInfo.getAt(0).get('sessionId'));
}
}
這個答案給我帶來了使用ref的正確途徑。非常感謝你!您可以使用autoCreate和forceCreate選項在控制器中使用高級參考。請參閱:[Sencha文檔](http://docs.sencha.com/touch/2.3.1/#!/guide/controllers-section-refs-and-control) – mAtZ