2011-09-07 168 views
1

我有一個從服務器獲取數據的數據源。然後將其用於數據表。我希望能夠過濾客戶端表中的數據,而無需再調用服務器。YUI:過濾數據表客戶端

// Data source definition 
myDataSource = new YAHOO.util.DataSource("myurl"); 
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
myDataSource.connXhrMode = "queueRequests"; 
myDataSource.responseSchema = { 
    resultsList: "ResultSet.Result", 
    fields: ["field1","field2"] 
} 

// Datatable definition 
myDataTable = new YAHOO.widget.DataTable("container", myColumnDefs,myDataSource, {}); 

回答

0

子類DataSource和讓與您通話設置爲results論證自己的過濾結果傳入的回調覆蓋sendRequest方法。

filterDataSource=function(arg) { 
    filterDataSource.superclass.constructor.call(this,arg); 
} 

YAHOO.extend(filterDataSource,YAHOO.util.XHRDataSource); 

filterDataSource.prototype.sendRequest=function(request, callback) { 
    var wrapCallBack=function (request,results,error) { 
     // !!! do filtering on results here !!! 
     callback.success.call(this,request,results,error); 
    }; 
    filterDataSource.superclass.sendRequest.call(this,request, { 
     success: wrapCallBack, argument: callback.argument 
    }); 
} 

而且使您的myDataSource一個new filterDataSource而不是new Yahoo.util.DataSource

聲明:此代碼可能無法正常工作;我把它從一些舊的工作代碼中剝離出來,很可能會跳過一些關鍵的部分。儘管如此,我希望它傳達了基本的想法。