XmlTreeLoader.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:4k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.0.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. Ext.ns('Ext.ux.tree');
  8. /**
  9.  * @class Ext.ux.tree.XmlTreeLoader
  10.  * @extends Ext.tree.TreeLoader
  11.  * <p>A TreeLoader that can convert an XML document into a hierarchy of {@link Ext.tree.TreeNode}s.
  12.  * Any text value included as a text node in the XML will be added to the parent node as an attribute
  13.  * called <tt>innerText</tt>.  Also, the tag name of each XML node will be added to the tree node as
  14.  * an attribute called <tt>tagName</tt>.</p>
  15.  * <p>By default, this class expects that your source XML will provide the necessary attributes on each
  16.  * node as expected by the {@link Ext.tree.TreePanel} to display and load properly.  However, you can
  17.  * provide your own custom processing of node attributes by overriding the {@link #processNode} method
  18.  * and modifying the attributes as needed before they are used to create the associated TreeNode.</p>
  19.  * @constructor
  20.  * Creates a new XmlTreeloader.
  21.  * @param {Object} config A config object containing config properties.
  22.  */
  23. Ext.ux.tree.XmlTreeLoader = Ext.extend(Ext.tree.TreeLoader, {
  24.     /**
  25.      * @property  XML_NODE_ELEMENT
  26.      * XML element node (value 1, read-only)
  27.      * @type Number
  28.      */
  29.     XML_NODE_ELEMENT : 1,
  30.     /**
  31.      * @property  XML_NODE_TEXT
  32.      * XML text node (value 3, read-only)
  33.      * @type Number
  34.      */
  35.     XML_NODE_TEXT : 3,
  36.     // private override
  37.     processResponse : function(response, node, callback){
  38.         var xmlData = response.responseXML;
  39.         var root = xmlData.documentElement || xmlData;
  40.         try{
  41.             node.beginUpdate();
  42.             node.appendChild(this.parseXml(root));
  43.             node.endUpdate();
  44.             if(typeof callback == "function"){
  45.                 callback(this, node);
  46.             }
  47.         }catch(e){
  48.             this.handleFailure(response);
  49.         }
  50.     },
  51.     // private
  52.     parseXml : function(node) {
  53.         var nodes = [];
  54.         Ext.each(node.childNodes, function(n){
  55.             if(n.nodeType == this.XML_NODE_ELEMENT){
  56.                 var treeNode = this.createNode(n);
  57.                 if(n.childNodes.length > 0){
  58.                     var child = this.parseXml(n);
  59.                     if(typeof child == 'string'){
  60.                         treeNode.attributes.innerText = child;
  61.                     }else{
  62.                         treeNode.appendChild(child);
  63.                     }
  64.                 }
  65.                 nodes.push(treeNode);
  66.             }
  67.             else if(n.nodeType == this.XML_NODE_TEXT){
  68.                 var text = n.nodeValue.trim();
  69.                 if(text.length > 0){
  70.                     return nodes = text;
  71.                 }
  72.             }
  73.         }, this);
  74.         return nodes;
  75.     },
  76.     // private override
  77.     createNode : function(node){
  78.         var attr = {
  79.             tagName: node.tagName
  80.         };
  81.         Ext.each(node.attributes, function(a){
  82.             attr[a.nodeName] = a.nodeValue;
  83.         });
  84.         this.processAttributes(attr);
  85.         return Ext.ux.tree.XmlTreeLoader.superclass.createNode.call(this, attr);
  86.     },
  87.     /*
  88.      * Template method intended to be overridden by subclasses that need to provide
  89.      * custom attribute processing prior to the creation of each TreeNode.  This method
  90.      * will be passed a config object containing existing TreeNode attribute name/value
  91.      * pairs which can be modified as needed directly (no need to return the object).
  92.      */
  93.     processAttributes: Ext.emptyFn
  94. });
  95. //backwards compat
  96. Ext.ux.XmlTreeLoader = Ext.ux.tree.XmlTreeLoader;