ExtJS学习:MVC模式案例(五)
到目前为止,我们ExtJS MVC案例系列教程已经进行了四讲,在这四讲中我们通过ExtJS的MVC模式实现了网页的布局以及页面的切换功能。今天我们主要实现右键菜单的功能,这也是我们整个案例教程的最后一讲,由于ITLee也是ExtJS的初雪者,写这些文章对那些有过ExtJS开发经验的人来说并没有什么实际意义,主要是希望对ExtJS的初学者起到抛砖引玉的作用。
要实现右键菜单的功能,首先我们需要添加一个菜单组件,在view文件夹中新建contextMenu.js文件,该文件中添加以下代码:
01 |
Ext.define('Demo.view.contextMenu', { |
02 |
extend: 'Ext.menu.Menu', |
03 |
alias: 'widget.contextmenu', |
04 |
float: true, |
05 |
items: [{ |
06 |
xtype: 'button', |
07 |
text: '添加', |
08 |
action: 'add', |
09 |
iconCls: 'leaf' |
10 |
}, { |
11 |
xtype: 'button', |
12 |
text: '删除', |
13 |
action: 'del', |
14 |
iconCls: 'leaf' |
15 |
}, { |
16 |
xtype: 'button', |
17 |
text: '编辑', |
18 |
action: 'edit', |
19 |
iconCls: 'leaf' |
20 |
}] |
21 |
}); |
正如我们前面所说的,添加组件后需要在控制器中进行加载,否则ExtJS的自动加载机制将不能找到我们的文件,下面修改demoController.js文件的view配置项,修改后的代码如下:
01 |
Ext.define('Demo.controller.demoController', { |
02 |
extend: 'Ext.app.Controller', |
03 |
//这次的修改在这里,给view配置项添加“contextMenu” |
04 |
views: ['Viewport','menuTree','contextMenu'], |
05 |
stores: ['menuStore'], |
06 |
model: ['menuModel'], |
07 |
//通过init函数来监听视图事件,控制视图与控制器的交互 |
08 |
init: function() { |
09 |
//init函数通过this.control来负责监听 |
10 |
this.control({ |
11 |
//被监听的组件的别名 |
12 |
'menutree': { |
13 |
//监听鼠标点击事件,点击后调用changePage方法 |
14 |
itemclick: this.changePage, |
15 |
} |
16 |
}); |
17 |
}, |
18 |
changePage:function(view, rec, item, index, e){ |
19 |
//获取url地址 |
20 |
var url = rec.get('url'); |
21 |
//获取当前节点信息 |
22 |
var title = rec.get('text'); |
23 |
//将主体内容部分的url地址指定为我们获取到的url |
24 |
Ext.getDom('contentIframe').src = url; |
25 |
//将主体内容框的标题设置为我们获取的节点信息 |
26 |
Ext.getCmp('mainContent').setTitle(title); |
27 |
} |
28 |
}); |
做完以上工作后,接下来就是为我们的menuTree组件添加右键监听事件了,修改控制器文件demoController.js:
01 |
Ext.define('Demo.controller.demoController', { |
02 |
extend: 'Ext.app.Controller', |
03 |
views: ['Viewport','menuTree','contextMenu'], |
04 |
stores: ['menuStore'], |
05 |
model: ['menuModel'], |
06 |
//通过init函数来监听视图事件,控制视图与控制器的交互 |
07 |
init: function() { |
08 |
//init函数通过this.control来负责监听 |
09 |
this.control({ |
10 |
//被监听的组件的别名 |
11 |
'menutree': { |
12 |
//监听鼠标点击事件,点击后调用changePage方法 |
13 |
itemclick: this.changePage, |
14 |
//监听鼠标右键事件,点击后调用contextMenu方法 |
15 |
itemcontextmenu: this.contextMenu |
16 |
} |
17 |
}); |
18 |
}, |
19 |
//页面切换方法 |
20 |
changePage:function(view, rec, item, index, e){ |
21 |
//获取url地址 |
22 |
var url = rec.get('url'); |
23 |
//获取当前节点信息 |
24 |
var title = rec.get('text'); |
25 |
//将主体内容部分的url地址指定为我们获取到的url |
26 |
Ext.getDom('contentIframe').src = url; |
27 |
//将主体内容框的标题设置为我们获取的节点信息 |
28 |
Ext.getCmp('mainContent').setTitle(title); |
29 |
}, |
30 |
//显示右键菜单方法 |
31 |
contextMenu:function(tree, record, item, index, e, eOpts){ |
32 |
//阻止浏览器默认右键事件 |
33 |
e.preventDefault(); |
34 |
e.stopEvent(); |
35 |
//显示右键菜单 |
36 |
var view = Ext.widget('contextmenu'); |
37 |
view.showAt(e.getXY()); |
38 |
} |
39 |
40 |
}); |
在demoController.js文件中添加以上代码后,刷新页面,在菜单节点上点击右键,看到如下效果图:
现在,我们整个案例教程就结束了,虽然还有很多功能没实现,如果继续扩展的话,怕是永远也讲不完了,呵呵,主要目的还是为ExtJS的新手们起一个引导的作用,希望对大家有所帮助。
posted on 2013-12-09 15:28 kangxuebin 阅读(2430) 评论(0) 收藏 举报
浙公网安备 33010602011771号