我可以使用多个下拉菜单和分页YUI数据表来过滤静态数据集的行吗?
答案 0 :(得分:1)
每个YAHOO.widget组件(例如YUI DataTable)都使用YUI DataSource组件,提供填充每个呈现的YAHOO.widget组件所需的数据。贝娄,你可以看到它是如何工作的
请注意每个YAHOO.widget组件内部通过sendRequest方法调用基础YUI数据源(请参阅步骤1)。现在让我们看看sendRequest签名
sendRequest(request, callback)
对于远程数据,此请求可能是参数/值字符串,例如“id = 123& name = foo”。 对于本地数据,此请求可能是更简单的值,例如123.指定参数可能是无关紧要的,因此此值可能只是空
它只是一个JavaScript对象,可以描述如下(注意每个属性)
var callback = {
success:function(request, response, payload) {
/*
* successful request is performed by success property
*/
},
failure:function(request, response, payload) {
/*
* failure request is performed by failure property
*/
},
scope:null,
argument:null
}
所以当每个YAHOO.widget组件调用内部YUI数据源时通过sendRequest方法,它传递一个内置回调对象,如上所示,它负责渲染YAHOO.widget组件本身。所以如果你想要一个自定义行为,你需要调用底层YUI数据源和传递你的自定义回调对象来过滤YUI数据源提供的数据,如下所示
var datatable = // YUI datatable settings goes here
附加每个更改事件对于每个选择,您都可以使用
YAHOO.util.Event.addListener("sex", "change", function(e) {
var value = e.getTarget(e).value;
if(YAHOO.lang.isValue(value)) {
/**
* Notice i am retrieving The underlying datasource To make a call To sendRequest method
*/
datatable.getDataSource().sendRequest(null, {
success:function(request, response, payload) {
/**
* because scope property (see bellow) refers To The datatable
* this keyword can be used To get a reference To The datatable
*/
/**
* initializeTable method clear any data stored by The datatable
*/
this.initializeTable();
var rs = response.results;
var filtered = [];
for(var i = 0; i < rs.length; i++) {
/**
* Is The sex property equal To The value selected by The user ?
*/
if(rs[i]["sex"] == value) {
filtered[filtered.length] = rs[i];
}
}
this.getRecordSet().setRecords(filtered, 0);
// Update UI
this.render();
},
scope:datatable,
argument:null
});
}
});
Althoug没有经过测试,我很确定它会正常工作。