我在 init 方法中启动加载面板并将其隐藏在 ReturnDataPayload 事件中。当数据表中有一些值时,这工作得很好。但是当没有从数据库返回数据时,控件不会返回数据PayLoad 事件。请帮助我找到即使响应没有任何数据也会被触发的事件,或者告诉我隐藏加载面板的方法。
问问题
413 次
1 回答
0
如果您想要自定义行为,请使用 dataTable 的 dataSource 的 DataSource 的 sendRequest 方法
(function() {
var YdataTable = YAHOO.widget.DataTable,
YdataSource = YAHOO.util.DataSource;
var settings = {
container:"<DATATABLE_CONTAINER_GOES_HERE>",
source:"<URL_TO_RETRIEVE_YOUR_DATA>",
columnSettings:[
{key:"id", label:"Id"}
],
dataSourceSettings:{
responseType:YdataSource.TYPE_JSON,
responseSchema:{
resultsList:"rs",
fields:[
{key:"id"}
]
}
},
dataTableSettings:{
initialLoad:false
}
}
var dataTable = new YdataTable(
settings.container,
settings.columnSettings,
new YdataSource(
settings.source,
settings.dataSourceSettings),
settings.dataTableSettings);
})();
请记住无论您的数据是哪个来源:XML、JSON、JavaScript 对象、TEXT,您总是会通过 DataSource 的 sendRequest 方法以统一的方式获取您的数据。因此,当您想要检索数据并同时添加自定义行为时,请使用它
dataTable.getDataSource().sendRequest(null, {
success:function(request, response, payload) {
if(response.results.length == 0) {
// No data returned
// Do what you want right here
// You can, for instance, hide the dataTable by calling this.setStyle("display", "none");
} else {
// Some data returned
// If you want to use default the DataTable behavior, just call
this.onDataReturnInitializeTable(request, response, payload);
}
},
scope:dataTable,
argument:dataTable.getState()
});
响应的属性是
- results(Array):你的数据源的统一方式。对于结果数组中的每个对象,根据 responseSchema 的 fields 属性,都有一个属性。注意我使用 response.results.length来验证是否返回了一些数据
- error(布尔值):表示数据错误
- cached (Boolean): 表示缓存的响应
- meta (Object):模式解析的元数据
在YUI dataTable 页面,查找Loading data at runtime可以看到 YUI dataTable 提供的一些内置函数
我希望它是有用的,并随时为你想要的关于 YUI 的任何其他问题寻求帮助。查看YUI dataTable 的不错功能的演示页面
于 2010-12-29T02:55:56.883 回答