日期:2014-05-16  浏览次数:20371 次

Extjs4开发笔记(三)——菜单的实现

转载:http://www.mhzg.net/a/20116/20116301260285.html

上篇文章介绍了搭建一个空的框架(链接地址:www.mhzg.net/a/20116/201162913210280.html),使得管理系统有了大致的模样,今天工作的主要内容就是菜单的实现以及点击菜单后在右边内容区打开一个新的Panel。本篇文章的内容主要包括两个方面,Extjs4 Tree及Extjs4 tabPanel。

在Extjs应用中实现菜单,无疑Tree是最好的选择,将菜单项直接写到Tree中,也未尝不可,但后期的维护会非常麻烦,那么最好的选择就是异步获取菜单节点,这样既有利于后期维护,也可以节省JS代码的编写量。

实现异步加载,那必须要有数据库和服务端程序。管理系统使用的是ACCESS数据库。在数据库中建立Menu表,表一共有4个字段,分别是ID、MenuName、ParentID和cls.

ID:自增长类型

MenuName:代表菜单的名字。ParentID

ParentID:父ID

cls:样式名(这个需要在样式表中体现出来,才会有效果)

数据库有了,接下来就是服务端的编写,其实JS框架的好处在于服务端无论用什么都可以,这里我就使用ASP来实现了。由于服务端涉及的方面比较多,较多代码帖出来会比较乱,这里只说下返回的形式。

菜单需要的JSON数据格式如下:

?
  1. [{"text":"管理员管理","id":"1","iconCls":"manage","leaf":true}]

这里注意一点:由于整棵菜单树都是异步获取的,所以节点并不需要递归,而树的node.id就是JSON数据中的ID。点击父节点展开子节点的时候,发送的数据也是node.id,这样正好解决获取子节点的问题。所有根节点的ParentID都为0。那么第一次加载菜单的时候,正好可以获取所有的根节点了。

重点,菜单树的数据源编写,根据MVC原则,在app目录下建立store文件夹,这个文件夹下放置所有的获取数据的js文件,在store文件夹下建立Menus.js,编写如下代码:

?
  1. Ext.define('SMS.store.Menus',{
  2. ????extend:?'Ext.data.TreeStore',
  3. ????root:?{?
  4. ????????expanded:?true?
  5. ????},?
  6. ????proxy:?{?
  7. ????????type:?'ajax',?
  8. ????????url:?'/server/MenuLoader.asp'?
  9. ????}?
  10. })

然后修改view文件夹下的Menu.js文件: