`

从XML读取ExtJS Tree

阅读更多

首先导入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.

分享到:
评论

相关推荐

    Extjs复习笔记(十九)-- XML作为tree的数据源

    总的来说,使用XML作为ExtJS TreePanel的数据源,允许我们从结构化的XML文件中构建灵活且可扩展的树状视图。通过理解XMLReader的工作原理,以及如何正确配置Store和TreePanel,我们可以实现高效的数据显示和交互。在...

    extjs.3.0中文API

    1. Store:存储数据的容器,可以从服务器加载数据,支持数据的读取、添加、删除和更新。 2. Proxy:与服务器通信的中介,处理数据的获取和提交,支持Ajax和ScriptTag两种模式。 3. Model:定义数据字段和验证规则...

    Extjs4.0视频教程和源代码,另附文档翻译

    - **不同格式的支持**:讲解了Extjs支持的多种数据格式(如JSON、XML等),并介绍如何使用相应的读写器进行处理。 ### 数据集(Store) #### 第六讲: Extjs4.0的数据集(Store) - **Store的作用**:解释了Store在...

    精通JS脚本之ExtJS框架.part2.rar

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    EXTJS教材,教程

    `MemoryProxy`用于从JavaScript变量加载数据,`ArrayReader`则指定如何读取数组中的数据,例如,告诉Grid每行数据的哪三个元素分别对应'id'、'name'和'descn'字段。 - **数据加载调用**:通过调用`ds.load()`来加载...

    Hibernate+Spring+Struts2+ExtJS CRUD

    本文将深入探讨如何利用这些技术实现CRUD(创建、读取、更新和删除)功能,并通过ExtJS实现实时动态加载树形结构数据。 首先,SSH是一个流行的Java EE开发框架,它整合了Spring的依赖注入和事务管理、Struts2的MVC...

    qlk.rar_extjs_订餐_餐馆管理_餐馆订餐

    虽然此压缩包并未包含后端代码,但EXTJS通过Ajax或Store组件可以方便地与服务器进行JSON或XML格式的数据交换,实现CRUD(创建、读取、更新、删除)操作。EXTJS的数据模型和proxy机制简化了前端与后端的数据交互。 ...

    extjs2.0源文件

    4. **Data Package**:EXTJS包含一个强大的数据包,它支持XML、JSON等多种数据格式,提供数据模型、proxy和store,方便数据的读取、存储和更新。 5. **Ajax和Script Tags**:EXTJS内置了Ajax和脚本标签请求机制,...

    ExtJs3.0中文API

    - **Store**: 数据存储,用于管理数据集,支持 JSON、XML 等格式的数据源。 - **Model**: 数据模型,定义数据字段和行为。 - **Proxy**: 数据代理,处理与服务器端的数据交互。 - **Reader/Writer**: 读取器和...

    精通JS脚本之ExtJS框架.part1.rar

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    extjs帮助文档

    - `new Ext.data.XmlReader(readerConfig, recordType)`:创建一个新的XML读取器实例。 - `Ext.data.XmlReader.read(response, options)`:读取数据。 #### 三十五、Ext.data.Store类(第28页) - **概述**:Ext....

    extjs帮助文档pdf版

    - `Ext.data.XmlReader.read(response)`: 读取XML数据。 #### 35. Ext.data.Store 类 (P.28) - **概述**:用于存储和管理数据集。 - **常用方法**: - `Ext.data.Store.load(params, callback, scope)`: 加载数据...

    基于JAVA的购物网站(毕业论文)(20210806152843).pdf

    论文描述了如何使用ExtJS的`Ext.data.JsonProxy`来实现AJAX请求,以及如何通过返回的JSON数据来进行数据的读取和更新。 4. MyBatis数据源配置:MyBatis通过配置`dataSource`来与数据库进行连接,其中`...

    Ext Js权威指南(.zip.001

    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 格式化输出数据...

    Ext表格控件和树控件

    通常情况下,数据是从服务器获取的 JSON 或 XML 格式的数据,`DataReader` 负责将这些数据转换为 `Store` 中的 `Record`。 ##### 3.4 DataProxy 数据代理 `DataProxy` 用于处理与服务器的通信,包括发送请求和接收...

Global site tag (gtag.js) - Google Analytics