首先导入Ext.ux.tree.XmlTreeLoader.js
/*!
* Ext JS Library 3.2.0
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.ns('Ext.ux.tree');
/**
* @class Ext.ux.tree.XmlTreeLoader
* @extends Ext.tree.TreeLoader
*
* @constructor
* Creates a new XmlTreeloader.
* @param {Object} config A config object containing config properties.
*/
Ext.ux.tree.XmlTreeLoader = Ext.extend(Ext.tree.TreeLoader, {
/**
* @property XML_NODE_ELEMENT
* XML element node (value 1, read-only)
* @type Number
*/
XML_NODE_ELEMENT : 1,
/**
* @property XML_NODE_TEXT
* XML text node (value 3, read-only)
* @type Number
*/
XML_NODE_TEXT : 3,
// private override
processResponse : function(response, node, callback){
var xmlData = response.responseXML;
var root = xmlData.documentElement || xmlData;
try{
node.beginUpdate();
node.appendChild(this.parseXml(root));
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(response);
}
},
// private
parseXml : function(node) {
var nodes = [];
Ext.each(node.childNodes, function(n){
if(n.nodeType == this.XML_NODE_ELEMENT){
var treeNode = this.createNode(n);
if(n.childNodes.length > 0){
var child = this.parseXml(n);
if(typeof child == 'string'){
treeNode.attributes.innerText = child;
treeNode.text = child;
}else{
treeNode.appendChild(child);
}
}
nodes.push(treeNode);
}
else if(n.nodeType == this.XML_NODE_TEXT){
var text = n.nodeValue.trim();
if(text.length > 0){
return nodes = text;
}
}
}, this);
return nodes;
},
// private override
createNode : function(node){
var attr = {
tagName: node.tagName
};
Ext.each(node.attributes, function(a){
attr[a.nodeName] = a.nodeValue;
});
this.processAttributes(attr);
return Ext.ux.tree.XmlTreeLoader.superclass.createNode.call(this, attr);
},
/*
* Template method intended to be overridden by subclasses that need to provide
* custom attribute processing prior to the creation of each TreeNode. This method
* will be passed a config object containing existing TreeNode attribute name/value
* pairs which can be modified as needed directly (no need to return the object).
*/
processAttributes: Ext.emptyFn
});
//backwards compat
Ext.ux.XmlTreeLoader = Ext.ux.tree.XmlTreeLoader;
然后添加针对XML文件格式的子类:
Ext.app.TestLoader = Ext.extend(Ext.ux.tree.XmlTreeLoader, {
processAttributes : function(attr){
if(attr.tagName=="category"){
attr.text = attr.name;
//attr.iconCls = '';
attr.loaded = true;
attr.expanded = false;
if(attr.isValid != "true"){
attr.hidden = true;
}
}
else if(attr.tagName=="select"){
//attr.iconCls = '';
attr.leaf = true;
}
}
});
Tree中数据的载入:
var tree = new Ext.tree.TreePanel({
renderTo: 'item',
width: 500,
height: 500,
autoScroll:true,
rootVisible: true,
root: new Ext.tree.AsyncTreeNode({
text: 'Root,
expanded: true
}),
loader: new Ext.app.TestLoader({
dataUrl:'data.xml'
})
});
A TreeLoader that can convert an XML document into a hierarchy of {@link Ext.tree.TreeNode}s.
* Any text value included as a text node in the XML will be added to the parent node as an attribute
* called innerText. Also, the tag name of each XML node will be added to the tree node as
* an attribute called tagName.
*
By default, this class expects that your source XML will provide the necessary attributes on each
* node as expected by the {@link Ext.tree.TreePanel} to display and load properly. However, you can
* provide your own custom processing of node attributes by overriding the {@link #processNode} method
* and modifying the attributes as needed before they are used to create the associated TreeNode.
分享到:
相关推荐
总的来说,使用XML作为ExtJS TreePanel的数据源,允许我们从结构化的XML文件中构建灵活且可扩展的树状视图。通过理解XMLReader的工作原理,以及如何正确配置Store和TreePanel,我们可以实现高效的数据显示和交互。在...
1. Store:存储数据的容器,可以从服务器加载数据,支持数据的读取、添加、删除和更新。 2. Proxy:与服务器通信的中介,处理数据的获取和提交,支持Ajax和ScriptTag两种模式。 3. Model:定义数据字段和验证规则...
- **不同格式的支持**:讲解了Extjs支持的多种数据格式(如JSON、XML等),并介绍如何使用相应的读写器进行处理。 ### 数据集(Store) #### 第六讲: Extjs4.0的数据集(Store) - **Store的作用**:解释了Store在...
《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...
`MemoryProxy`用于从JavaScript变量加载数据,`ArrayReader`则指定如何读取数组中的数据,例如,告诉Grid每行数据的哪三个元素分别对应'id'、'name'和'descn'字段。 - **数据加载调用**:通过调用`ds.load()`来加载...
本文将深入探讨如何利用这些技术实现CRUD(创建、读取、更新和删除)功能,并通过ExtJS实现实时动态加载树形结构数据。 首先,SSH是一个流行的Java EE开发框架,它整合了Spring的依赖注入和事务管理、Struts2的MVC...
虽然此压缩包并未包含后端代码,但EXTJS通过Ajax或Store组件可以方便地与服务器进行JSON或XML格式的数据交换,实现CRUD(创建、读取、更新、删除)操作。EXTJS的数据模型和proxy机制简化了前端与后端的数据交互。 ...
4. **Data Package**:EXTJS包含一个强大的数据包,它支持XML、JSON等多种数据格式,提供数据模型、proxy和store,方便数据的读取、存储和更新。 5. **Ajax和Script Tags**:EXTJS内置了Ajax和脚本标签请求机制,...
- **Store**: 数据存储,用于管理数据集,支持 JSON、XML 等格式的数据源。 - **Model**: 数据模型,定义数据字段和行为。 - **Proxy**: 数据代理,处理与服务器端的数据交互。 - **Reader/Writer**: 读取器和...
《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...
论文描述了如何使用ExtJS的`Ext.data.JsonProxy`来实现AJAX请求,以及如何通过返回的JSON数据来进行数据的读取和更新。 4. MyBatis数据源配置:MyBatis通过配置`dataSource`来与数据库进行连接,其中`...
7.6.2 读取xml数据 / 378 7.6.3 store的数据操作 / 379 7.7 本章小结 / 384 第8章 模板与组件基础 / 385 8.1 模板 / 385 8.1.1 模板概述 / 385 8.1.2 ext.template的创建与编译 / 385 8.1.3 格式化输出数据...
通常情况下,数据是从服务器获取的 JSON 或 XML 格式的数据,`DataReader` 负责将这些数据转换为 `Store` 中的 `Record`。 ##### 3.4 DataProxy 数据代理 `DataProxy` 用于处理与服务器的通信,包括发送请求和接收...