init メソッドでローディング パネルを開始し、ReturnDataPayload イベントで非表示にしています。これは、データ テーブルに値が含まれている場合に完全に機能します。しかし、データベースからデータが返されない場合、コントロールは DataPayLoad イベントを返しません。応答にデータがない場合でも発生するイベントを見つけるのを手伝ってくれるか、読み込みパネルを非表示にする方法を教えてください。
質問する
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 (配列): 統一された方法でのデータ ソース。results Array 内の各オブジェクトには、responseSchema の fields プロパティに応じたプロパティがあります。一部のデータが返されたかどうかを確認するためにresponse.results.length を使用していることに注意してください
- error (Boolean): データ エラーを示します
- cached (ブール値): キャッシュされたレスポンスを示します
- meta (オブジェクト): スキーマ解析されたメタデータ
YUI dataTable ページで、 Loading data at runtimeを探して、YUI dataTable によって提供されるいくつかの組み込み関数を確認します。
この記事がお役に立てば幸いです。また、YUI について他に必要なことがありましたら、お気軽にお問い合わせください。YUI dataTable の優れた機能のデモ ページを参照してください
于 2010-12-29T02:55:56.883 に答える