108 lines
3.3 KiB
JavaScript
108 lines
3.3 KiB
JavaScript
|
YAHOO.ext.tree.TreeLoader = function(config){
|
||
|
this.baseParams = {};
|
||
|
this.requestMethod = 'POST';
|
||
|
YAHOO.ext.util.Config.apply(this, config);
|
||
|
|
||
|
this.events = {
|
||
|
'beforeload' : true,
|
||
|
'load' : true,
|
||
|
'loadexception' : true
|
||
|
};
|
||
|
};
|
||
|
|
||
|
YAHOO.extendX(YAHOO.ext.tree.TreeLoader, YAHOO.ext.util.Observable, {
|
||
|
load : function(node, callback){
|
||
|
if(node.attributes.children){ // preloaded json children
|
||
|
var cs = node.attributes.children;
|
||
|
for(var i = 0, len = cs.length; i < len; i++){
|
||
|
node.appendChild(this.createNode(cs[i]));
|
||
|
}
|
||
|
if(typeof callback == 'function'){
|
||
|
callback();
|
||
|
}
|
||
|
}else if(this.dataUrl){
|
||
|
this.requestData(node, callback);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getParams: function(node){
|
||
|
var buf = [], bp = this.baseParams;
|
||
|
for(var key in bp){
|
||
|
if(typeof bp[key] != 'function'){
|
||
|
buf.push(encodeURIComponent(key), '=', encodeURIComponent(bp[key]), '&');
|
||
|
}
|
||
|
}
|
||
|
buf.push('node=', encodeURIComponent(node.id));
|
||
|
return buf.join('');
|
||
|
},
|
||
|
|
||
|
requestData : function(node, callback){
|
||
|
if(this.fireEvent('beforeload', this, node, callback) !== false){
|
||
|
var params = this.getParams(node);
|
||
|
var cb = {
|
||
|
success: this.handleResponse,
|
||
|
failure: this.handleFailure,
|
||
|
scope: this,
|
||
|
argument: {callback: callback, node: node}
|
||
|
};
|
||
|
this.transId = YAHOO.util.Connect.asyncRequest(this.requestMethod, this.dataUrl, cb, params);
|
||
|
}else{
|
||
|
// if the load is cancelled, make sure we notify
|
||
|
// the node that we are done
|
||
|
if(typeof callback == 'function'){
|
||
|
callback();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
isLoading : function(){
|
||
|
return this.transId ? true : false;
|
||
|
},
|
||
|
|
||
|
abort : function(){
|
||
|
if(this.isLoading()){
|
||
|
YAHOO.util.Connect.abort(this.transId);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
createNode : function(attr){
|
||
|
if(this.applyLoader !== false){
|
||
|
attr.loader = this;
|
||
|
}
|
||
|
return(attr.leaf ?
|
||
|
new YAHOO.ext.tree.TreeNode(attr) :
|
||
|
new YAHOO.ext.tree.AsyncTreeNode(attr));
|
||
|
},
|
||
|
|
||
|
processResponse : function(response, node, callback){
|
||
|
var json = response.responseText;
|
||
|
try {
|
||
|
var o = eval('('+json+')');
|
||
|
for(var i = 0, len = o.length; i < len; i++){
|
||
|
node.appendChild(this.createNode(o[i]));
|
||
|
}
|
||
|
if(typeof callback == 'function'){
|
||
|
callback();
|
||
|
}
|
||
|
}catch(e){
|
||
|
this.handleFailure(response);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
handleResponse : function(response){
|
||
|
this.transId = false;
|
||
|
var a = response.argument;
|
||
|
this.processResponse(response, a.node, a.callback);
|
||
|
this.fireEvent('load', this, a.node, response);
|
||
|
},
|
||
|
|
||
|
handleFailure : function(response){
|
||
|
this.transId = false;
|
||
|
var a = response.argument;
|
||
|
this.fireEvent('loadexception', this, a.node, response);
|
||
|
if(typeof a.callback == 'function'){
|
||
|
a.callback();
|
||
|
}
|
||
|
}
|
||
|
});
|