我们接dojoTree Controller(1)继续讨论 TreeLoadingController
1:该类在TreeBasicController基础上增加了RPCUrl和RPCActionParam(默认为action)两个参数。解释这两个参数必须看下面的代码:
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;
2:通用的错误处理器:
RPCErrorHandler: function(type, obj, evt) {
alert( "RPC Error: " + (obj.message||"no message"));
},
可以自己定义处理方式。
3:看以下runRPC的这段代码,就能明白服务器端该怎么处理请求:
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) }
});
4:loadRemote是动态装载该节点的子节点的方法,可以看看该方法的rpc部分:
var params = {
node: this.getInfo(node),
tree: this.getInfo(node.tree)
};
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) }
});
5:相对TreeBasicController,该Controller还重写了doMove和doCreateChild方法。
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);
},
可以看到是在同步处理完服务器的请求后,再执行的客户端操作。因此我们只要在服务器端处理添加新节点和移动节点时,只要返回true或false就可以了。
posted on 2006-11-22 23:15
不做浮躁的人 阅读(991)
评论(0) 编辑 收藏