Extjs4.2 MVC模式开发动态添加TabPanel的时候子页对应的controller无法触发

klausyorkoswald 2014-07-23 04:36:39
文档结构,如图
页面效果图,如图

功能是这样的:
点击右侧账号管理按钮→中间TabPanel创建新的Tab(如果已经有了就激活)。新建的Tab的内容是账号管理子页面。正常来说,加载数据,并且自定义按钮可用(添加 修改 删除,在翻页工具条旁边)。

现在点击按钮后,可以创建新标签,对应页面也能显示出来,但是自定义控件无法使用。现在只能确定,子页面的controller无法响应,里边绑定了自定义控件的事件。

view→main→ListTree是右侧的功能树
view→main→Main是中间的Tab标签
controller→main→ListTree 是功能树的controller
controller→user→main 是账户管理的controller

按钮的controller定义是这么写的
init: function () {
var me = this;
me.control({
"#sys_mmgl": {
click: this.onSysMMGLClick
},
"#sys_zhgl": {
click: this.onSysZHGLClick
}
});
},

onSysMMGLClick: function (button, e, eOpts) {
this.ShowMyPage(button.id, '密码管理', '','');
},

onSysZHGLClick: function (button, e, eOpts) {
this.ShowMyPage(button.id, '账号管理','' ,'userMain');
},

ShowMyPage: function (btnId, pageTitle, pageHTML, pageType) {
var mainPage = Ext.getCmp('app-mainZ');
var newTab = mainPage.getComponent(mainPage.id + btnId);

if (!newTab) {
newTab = mainPage.add({
id: mainPage.id + btnId,
title: pageTitle,
html: pageHTML,
closable: true,
xtype: pageType,
});
newTab.getStore().load();
newTab.show();
}
mainPage.setActiveTab(newTab);

},
});

子页的控制器是这么写的

Ext.define('DemoCMS.controller.user.Main', {
extend: 'Ext.app.Controller',

refs: [
{
ref: 'userView',//引用名称,主要作用是生成访问方法,以便引用对象;注意,首字母不能大写
selector: '#userMain',//查询组件使用的选择符

}
],

init: function () {
var me = this;
me.control({
//为视图绑定show事件,single控制数据只在第一次显示时处罚,否则页面会在标签切换时多次触发
'#userMain': {
show: {
single: true,
fn: me.onViewShow,
},
selectionchange: me.onSelectUser,
},

'#userMain #Add': {
click: me.onAddUser,
},

'#userMain #Delete': {
click:me.onDeleteUser,
},

'#userMain #ResetPassword': {
click: me.onResetPassword,
},
});

},

onViewShow: function () {
//由于编辑插件不是用户视图的子组件,所以不能在control方法内定义;所以先获取用户视图,然后通过用户视图的rowEditing属性获取行编辑插件
//再通过on方法来绑定事件;由于要获取用户视图,在init和onLaunch方法内并不能保证视图创建,必须保证在视图渲染或显示后调用;所以在onViewShow方法内调用
var me = this;
me.getUserView().rowEditing.on({
scope: me,
canceledit: me.onCancelEdit,//取消按钮
edit: me.onCompleteEdit//保存按钮
});
//加载存储
Ext.getStore('Users').load();
},
});


求教 怎么解决这个问题
...全文
265 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
klausyorkoswald 2014-11-17
  • 打赏
  • 举报
回复
结贴了 三楼虽然没全对,但是方向没问题。 这种选择器方式没问题,是我路径错了。我是按照被打开页面#userMain去定义的。应该是从Tab标签去找 就能触发事件了 感谢LS各位朋友的回答
Joyce-Luo 2014-11-17
  • 打赏
  • 举报
回复

nacMainFrameControl.application.getController(controllerName).init();
关键代码就在这里了
andyLiuJava 2014-11-13
  • 打赏
  • 举报
回复
liln0530 2014-07-30
  • 打赏
  • 举报
回复
会不会是id重定义的问题,你的control关联的是id,你用类名试试
浮生若梦 2014-07-29
  • 打赏
  • 举报
回复
你确定'#userMain #Add'这种选择器没问题?我初学,没这么用过
klausyorkoswald 2014-07-23
  • 打赏
  • 举报
回复
更换主题就好~
ILazy_Boy 2014-07-23
  • 打赏
  • 举报
回复
我不会,就看看,坐等大虾,为什么我的ExtJS做出的界面都是蓝色的,没你这个好看

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧