⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeloadingcontroller.js

📁 dojo与json创建无限级树的时候,当在父结点下添加了一个新结点,我怎么让父亲结点重新调用json加载一下子结点内容.
💻 JS
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.TreeLoadingController");dojo.require("dojo.widget.TreeBasicController");dojo.require("dojo.event.*");dojo.require("dojo.json")dojo.require("dojo.io.*");dojo.widget.tags.addParseTreeHandler("dojo:TreeLoadingController");dojo.widget.TreeLoadingController = function() {	dojo.widget.TreeBasicController.call(this);}dojo.inherits(dojo.widget.TreeLoadingController, dojo.widget.TreeBasicController);dojo.lang.extend(dojo.widget.TreeLoadingController, {	widgetType: "TreeLoadingController",	RPCUrl: "",	RPCActionParam: "action", // used for GET for RPCUrl	/**	 * Common RPC error handler (dies)	*/	RPCErrorHandler: function(type, obj, evt) {		alert( "RPC Error: " + (obj.message||"no message"));	},	getRPCUrl: function(action) {		// RPCUrl=local meant SOLELY for DEMO and LOCAL TESTS.		// May lead to widgetId collisions		if (this.RPCUrl == "local") {			var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));			var localUrl = dir+"/"+action;			//dojo.debug(localUrl);			return localUrl;		}		if (!this.RPCUrl) {			dojo.raise("Empty RPCUrl: can't load");		}		return this.RPCUrl + ( this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam+"="+action;	},	/**	 * Add all loaded nodes from array obj as node children and expand it	*/	loadProcessResponse: function(node, result, callObj, callFunc) {		if (!dojo.lang.isUndefined(result.error)) {			this.RPCErrorHandler("server", result.error);			return false;		}		//dojo.debugShallow(result);		var newChildren = result;		if (!dojo.lang.isArray(newChildren)) {			dojo.raise('loadProcessResponse: Not array loaded: '+newChildren);		}		for(var i=0; i<newChildren.length; i++) {			// looks like dojo.widget.manager needs no special "add" command			newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);			node.addChild(newChildren[i]);		}		//node.addAllChildren(newChildren);		node.state = node.loadStates.LOADED;		//dojo.debug(callFunc);		if (dojo.lang.isFunction(callFunc)) {			callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);		}		//this.expand(node);	},	getInfo: function(obj) {		return obj.getInfo();	},	runRPC: function(kw) {		var _this = this;		var handle = function(type, data, evt) {			// unlock BEFORE any processing is done			// so errorHandler may apply locking			if (kw.lock) {				dojo.lang.forEach(kw.lock,					function(t) { t.unlock() }				);			}			if(type == "load"){				kw.load.call(this, data);			}else{				this.RPCErrorHandler(type, data, evt);			}		}		if (kw.lock) {			dojo.lang.forEach(kw.lock,				function(t) { t.lock() }			);		}		dojo.io.bind({			url: kw.url,			/* I hitch to get this.loadOkHandler */			handle: dojo.lang.hitch(this, handle),			mimetype: "text/json",			preventCache: true,			sync: kw.sync,			content: { data: dojo.json.serialize(kw.params) }		});	},	/**	 * Load children of the node from server	 * Synchroneous loading doesn't break control flow	 * I need sync mode for DnD	*/	loadRemote: function(node, sync, callObj, callFunc){		var _this = this;		var params = {			node: this.getInfo(node),			tree: this.getInfo(node.tree)		};		//dojo.debug(callFunc)		this.runRPC({			url: this.getRPCUrl('getChildren'),			load: function(result) {				_this.loadProcessResponse(node, result, callObj, callFunc) ;			},			sync: sync,			lock: [node],			params: params		});	},	expand: function(node, sync, callObj, callFunc) {		if (node.state == node.loadStates.UNCHECKED && node.isFolder) {			this.loadRemote(node, sync,				this,				function(node, newChildren) {					this.expand(node, sync, callObj, callFunc);				}			);			return;		}		dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);	},	doMove: function(child, newParent, index) {		/* load nodes into newParent in sync mode, if needed, first */		if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {			this.loadRemote(newParent, true);		}		return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);	},	doCreateChild: function(parent, index, data, callObj, callFunc) {		/* load nodes into newParent in sync mode, if needed, first */		if (parent.state == parent.loadStates.UNCHECKED) {			this.loadRemote(parent, true);		}		return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);	}});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -