我有这个结构:
Example.Form = Ext.extend(Ext.form.FormPanel, {
// other element
, onSuccess:function(form, action) {
}
}
Ext.reg('exampleform', Example.Form);
Ext.onReady(function() {
var win = new Ext.Window({
id:'formloadsubmit-win'
,items:{id:'add', xtype:'exampleform'}
});
win.show();
})
我删除了上面的额外代码......
我想这样做:当我在功能上提交表格时 - > Example.Form类中的onSuccess能够关闭正文窗口。 (当成功结果被提交并且打开的窗口的主体变得关闭时)
我为我糟糕的英语道歉。
答案 0 :(得分:1)
代码的结构应该允许一个地方存储您注册为xtypes的组件。它还应该具有构成应用程序的组件的顶级命名空间。这样,您始终可以引用应用的各个部分。打破控制器逻辑也是一个好主意。对于小型应用程序,单个控制器可以正常工作,但一旦应用程序增长,最好为应用程序安装许多控制器,每个控制器一个。
以下是您在该示例中输入的代码的修改版本。它将处理成功事件,其结构符合上述建议。
Ext.ns('Example');
/* store components to be used by app */
Ext.ns('Example.lib');
/* store instances of app components */
Ext.ns('Example.app');
Example.lib.Form = Ext.extend(Ext.form.FormPanel, {
// other element
// moved to app controller
//onSuccess:function(form, action) {
//}
});
Ext.reg('exampleform', Example.lib.Form);
Example.lib.FormWindow = Ext.extend(Ext.Window,{
initComponent: function(){
/* add the items */
this.items ={itemId:'add', xtype:'exampleform'};
/* ext js requires this call for the framework to work */
Example.lib.FormWindow.superclass.initComponent.apply(this, arguments);
}
});
Ext.reg('exampleformwin', Example.lib.FormWindow);
/*
manage/control the app
*/
Example.app.appController = {
initApp: function(){
Example.app.FormWindow = Ext.create({xtype:'exampleformwin', id:'formloadsubmit-win'});
Example.app.FormWindow.show();
/* get a reference to the 'add' form based on that item id and bind to the event */
Example.app.FormWindow.get('add').on('success', this.onAddFormSuccess, this );
},
/* the logic to handle the add-form's sucess event */
onAddFormSuccess: function(){
Example.app.FormWindow.hide();
}
}
Ext.onReady(function() {
/* start the app */
Example.app.appController.initApp()
})