从MVC的设计模式来说,View负责展示层,那对于控件的事件,自然要放在Controller里面实现。
Controller的实现,需要定义一个Controller对象
Ext.define('MyApp.controller.Users', {
extend: 'Ext.app.Controller',
init: function() {
console.log('Initialized Users! This happens before ' +
'the Application launch() function is called');
}
});
当然Controller需要在Application加载的时候同时加载进来。所以在之前介绍Ext.Application的时候,除了加载View ,还需要加载对应的Controller.
Ext.define('MyApp.controller.Users', {
extend: 'Ext.app.Controller',
init: function() {
console.log('Initialized Users! This happens before ' +
'the Application launch() function is called');
}
});
以下是我在图书管理系统中所写的LoginController
Ext.define('Library.controller.Login', {
extend: 'Ext.app.Controller',
refs:[
{ref:'userId',selector:'#txtUserId'},
{ref:'loginForm',selector:'loginForm'}
],
init: function() {
var me = this;
me.control({
'#btnSubmit':{
click:me.fnLogin
},
'#formLogin':{
show:me.fnShow,
close:me.fnClose,
}
})
},
/**
* Login function
*/
fnLogin:function(){
var me = this;
var valid = me.getLoginForm().getForm().isValid();
if(valid){
me.getLoginForm().getForm().submit({
success:function(form,action){
me.user = action.result.userInfo;
me.getLoginForm().close();
},
failure:function(form,action){
alert(action.result.msg);
}
});
}
},
fnClose:function(){
this.getController('Library').fnAfterSignIn(this.user);
Ext.getBody().unmask();
},
fnShow:function(){
Ext.getBody().mask();
this.getUserId().focus(true,true);
}
});
me.control 里面定义了view中控件的事件。
这里需要说明一下refs属性。
refs的功能和selector相似,给选择器定义了别名,在这个controller内,就可以用get方法来获取该选择器以替代Ext.getCmp("XXX")的方式。
如上文中定义了
{ref:'loginForm',selector:'loginForm'}则在该Controller中,可以通过this.getLoginForm()的方法获取这个对象。