Upgrade to ExtJS 3.1.1 - Released 02/08/2010
[extjs.git] / src / widgets / tree / TreeLoader.js
index 4252de4..6f9fc3e 100644 (file)
@@ -1,6 +1,6 @@
 /*!
- * Ext JS Library 3.0.3
- * Copyright(c) 2006-2009 Ext JS, LLC
+ * Ext JS Library 3.1.1
+ * Copyright(c) 2006-2010 Ext JS, LLC
  * licensing@extjs.com
  * http://www.extjs.com/license
  */
@@ -74,7 +74,7 @@ Ext.tree.TreeLoader = function(config){
         "loadexception"\r
     );\r
     Ext.tree.TreeLoader.superclass.constructor.call(this);\r
-    if(typeof this.paramOrder == 'string'){\r
+    if(Ext.isString(this.paramOrder)){\r
         this.paramOrder = this.paramOrder.split(/[\s,|]/);\r
     }\r
 };\r
@@ -120,15 +120,15 @@ Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {
 \r
     /**\r
      * @cfg {Array/String} paramOrder Defaults to <tt>undefined</tt>. Only used when using directFn.\r
-     * A list of params to be executed\r
-     * server side.  Specify the params in the order in which they must be executed on the server-side\r
+     * Specifies the params in the order in which they must be passed to the server-side Direct method\r
      * as either (1) an Array of String values, or (2) a String of params delimited by either whitespace,\r
      * comma, or pipe. For example,\r
      * any of the following would be acceptable:<pre><code>\r
+nodeParameter: 'node',\r
 paramOrder: ['param1','param2','param3']\r
-paramOrder: 'param1 param2 param3'\r
-paramOrder: 'param1,param2,param3'\r
-paramOrder: 'param1|param2|param'\r
+paramOrder: 'node param1 param2 param3'\r
+paramOrder: 'param1,node,param2,param3'\r
+paramOrder: 'param1|param2|param|node'\r
      </code></pre>\r
      */\r
     paramOrder: undefined,\r
@@ -140,6 +140,12 @@ paramOrder: 'param1|param2|param'
      */\r
     paramsAsHash: false,\r
 \r
+    /**\r
+     * @cfg {String} nodeParameter The name of the parameter sent to the server which contains\r
+     * the identifier of the node. Defaults to <tt>'node'</tt>.\r
+     */\r
+    nodeParameter: 'node',\r
+\r
     /**\r
      * @cfg {Function} directFn\r
      * Function to call when executing a request.\r
@@ -151,8 +157,10 @@ paramOrder: 'param1|param2|param'
      * This is called automatically when a node is expanded, but may be used to reload\r
      * a node (or append new children if the {@link #clearOnLoad} option is false.)\r
      * @param {Ext.tree.TreeNode} node\r
-     * @param {Function} callback\r
-     * @param (Object) scope\r
+     * @param {Function} callback Function to call after the node has been loaded. The\r
+     * function is passed the TreeNode which was requested to be loaded.\r
+     * @param (Object) scope The cope (<code>this</code> reference) in which the callback is executed.\r
+     * defaults to the loaded TreeNode.\r
      */\r
     load : function(node, callback, scope){\r
         if(this.clearOnLoad){\r
@@ -186,27 +194,29 @@ paramOrder: 'param1|param2|param'
     },\r
 \r
     getParams: function(node){\r
-        var buf = [], bp = this.baseParams;\r
+        var bp = Ext.apply({}, this.baseParams),\r
+            np = this.nodeParameter,\r
+            po = this.paramOrder;\r
+\r
+        np && (bp[ np ] = node.id);\r
+\r
         if(this.directFn){\r
-            buf.push(node.id);\r
-            if(bp){\r
-                if(this.paramOrder){\r
-                    for(var i = 0, len = this.paramOrder.length; i < len; i++){\r
-                        buf.push(bp[this.paramOrder[i]]);\r
-                    }\r
-                }else if(this.paramsAsHash){\r
-                    buf.push(bp);\r
+            var buf = [node.id];\r
+            if(po){\r
+                // reset 'buf' if the nodeParameter was included in paramOrder\r
+                if(np && po.indexOf(np) > -1){\r
+                    buf = [];\r
                 }\r
+\r
+                for(var i = 0, len = po.length; i < len; i++){\r
+                    buf.push(bp[ po[i] ]);\r
+                }\r
+            }else if(this.paramsAsHash){\r
+                buf = [bp];\r
             }\r
             return buf;\r
         }else{\r
-            for(var key in bp){\r
-                if(!Ext.isFunction(bp[key])){\r
-                    buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&");\r
-                }\r
-            }\r
-            buf.push("node=", encodeURIComponent(node.id));\r
-            return buf.join("");\r
+            return bp;\r
         }\r
     },\r
 \r
@@ -296,7 +306,7 @@ new Ext.tree.TreePanel({
         if(this.applyLoader !== false && !attr.loader){\r
             attr.loader = this;\r
         }\r
-        if(typeof attr.uiProvider == 'string'){\r
+        if(Ext.isString(attr.uiProvider)){\r
            attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);\r
         }\r
         if(attr.nodeType){\r
@@ -338,5 +348,10 @@ new Ext.tree.TreePanel({
         var a = response.argument;\r
         this.fireEvent("loadexception", this, a.node, response);\r
         this.runCallback(a.callback, a.scope || a.node, [a.node]);\r
+    },\r
+\r
+    destroy : function(){\r
+        this.abort();\r
+        this.purgeListeners();\r
     }\r
 });
\ No newline at end of file