我們接dojoTree Controller(1)繼續(xù)討論 TreeLoadingController
1:該類在TreeBasicController基礎(chǔ)上增加了RPCUrl和RPCActionParam(默認為action)兩個參數(shù)。解釋這兩個參數(shù)必須看下面的代碼:
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的這段代碼,就能明白服務(wù)器端該怎么處理請求:
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是動態(tài)裝載該節(jié)點的子節(jié)點的方法,可以看看該方法的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);
?},
可以看到是在同步處理完服務(wù)器的請求后,再執(zhí)行的客戶端操作。因此我們只要在服務(wù)器端處理添加新節(jié)點和移動節(jié)點時,只要返回true或false就可以了。
posted on 2006-11-22 23:15
不做浮躁的人 閱讀(991)
評論(0) 編輯 收藏