一、创建树
Extjs4 中tree组件功能强大,是extjs学习过程中的重要一环。tree组件作为extjs4中的重要组件之一,在几乎所有的extjs系统中都有使用,本人在实际使用过程中也曾遇到过很多困扰,但最终还是通过各种方式加以解决了,下面与大家分享一下个人心得,希望能给大家带来点帮助。
通过Sencha Arthitect2 可以用所见即所得的方式生成任何你所想要的Extjs界面元素,而无需花太多时间去编写代码, 大大提高了编程效率。
在toolbox里选择Trees标签,拖动tree panel 至已经布局好的界面布局内,如BORDER布局的WEST,默认情况下,treepanel 里只有一列(tree column)。此时treepanel里没有节点,如若你要建立的是静态树,那么你只需要通过属性编辑器编辑treepanel 的root属性为treepanel添加默认的根节点,此属性为object类型,可接受json类型对象如下,此时创建的树为同步树,不需要与服务器交互获取节点数据。
root: {text: 'root',leaf: false,childern:[{text:'child1',leaf:true}]}
Sencha Arthitect2 中treepanel组件
配置treepanel的root属性:
二、异步树
1、Model、Proxy、Store
Ext.define('MyApp.store.MyJsonTreeStore', {
extend: 'Ext.data.TreeStore',
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
storeId: 'MyJsonTreeStore',
defaultRootId: 1,
root: {
text: '工程编号',
leaf: false
},
proxy: {
type: 'ajax',
url:'test.action',
extraParams: {
en: 'default'
},
reader: {
type: 'json'
}
},
fields: [
{
name: 'text',
type: 'string'
},
{
name: 'desc',
type: 'string'
},
{
name: 'en',
type: 'string'
},
{
name: 'wm',
type: 'string'
}
]
}, cfg)]);
}
});
上述代码定义了一个treestore,并配置了proxy与fields选项,fields在这里即Model也可将其单独配置在Model中,然后在此处指定model选项。2、动态加载
onTreepanelBeforeLoad: function(store, operation, options) {
operation.params.en=operation.node.data.en;
}
这样每次点击树节点前边的加号或双击节点后,系统都会将en参数设置成节点的en属性值并发送至服务器实现动态加载,而服务器处理代码可依据传递的参数返回不同的节点的数据。 JSONArray json = new JSONArray();//初始化JSON数组对象
if (node.equals("1")) { //根据不同节点ID返回不同的JSON节点数据
List<EngineNumber> ens = DBManager.getAllEngines();
for (int i = 0; i < ens.size(); i++) {
JSONObject object = new JSONObject();//json对象
object.put("id", "E" + String.format("%04d", i) );//后台返回的树节点id值
object.put("text", ens.get(i).getFullname()); //树节点显示内容
object.put("desc", "【" + ens.get(i).getEtype() + " | " + ens.get(i).getTaifeng() + "】"); //描述列显示的值
object.put("en", ens.get(i).getEnumber()); //用于获取子节点的参数值
object.put("wm", ens.get(i).getW_m());
//以下为非数据属性
object.put("leaf", false); //是否为叶子节点
object.put("iconCls", "enginenumber");//图标样式
json.put(object);
}
} else if (node.startsWith("E") ) { //根据不同节点ID返回不同的JSON节点数据
List<GroupTreeNode> groups = DBManager.getGroupsOfEnginenumber(this.en);
for (int i = 0; i < groups.size(); i++) {
JSONObject obj1 = new JSONObject();
obj1.put("id", "G"+node + String.format("%04d", i));
obj1.put("text", groups.get(i).getGroupname());
obj1.put("desc", groups.get(i).getName());
obj1.put("en", this.en);
//obj1.put("wm", this.wm);
obj1.put("leaf", true);
obj1.put("iconCls", "file");
json.put(obj1);
}
}
ActionContext ctx = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(json.toString());//将json对象输出到前台
return null;