解決策を見つけるためにこの問題についていくつかの調査を行った後、残念ながら私の問題を投稿することが最善であると判断しました。私は現在、ビューにアセット情報を含むデータテーブルを持っており、アセットがアセットテーブルに追加されるまで、ユーザが選択フィールドでオプションを変更し続けるのを防止しようとしています。以下上場テーブルが完全にロードされた後にdatatablesが空であることを確認するjQuery
はdocument.ready関数の下で私の.jsファイルに
assets = $('#assets').dataTable({
sAjaxSource: "http://" + window.location.hostname + "/request/get-request-assets/?id=" + $('#id').val(),
fnDrawCallback: function (oSettings) {
setIncompleteTD();
enableRequestStatus();
},
scrollY: '185px',
scrollCollapse: true,
paging: false,
aaSorting: [[1, 'asc']],
bPaginate: false,
bFilter: false,
bLengthChange: false,
bAutoWidth: false,
bInfo: false,
aoColumns: [
{sWidth: '35px', bSortable: false},
{sWidth: '40px'},
{},
{},
{},
{},
{},
{sWidth: '80px'}
],
language: {
sLoadingRecords: '',
sEmptyTable: 'This request has no asset records.',
sInfoEmpty: ''
}
私の資産のDataTableのコードである私は(table.fnSettingsを見つけた)。aoData.lengthの=== 0としてテーブルが空であるかどうかをチェックすることを意味します。しかし、(クロームデバッガ経由)コードのステップの後に、それはテーブルが完全に生成される前に関数を呼び出します(少なくとも私の場合)DataTableのようだ...
私は
assetPresent = (assets.fnSettings().aoData.length===0) ? false : true;
console.log(assetPresent);
以下、このコードを持っています$( '#assets')の後にdocument.ready関数内にあります。dataTable()関数(これが重要な場合)。 AssetPresentはステータス選択ボックスを切り替えるフラグとして使用されます。残念ながら、私はそれを利用することができます前に...
console.log(assetPresent);
assetPresent = (assets.fnSettings().aoData.length===0) ? false : true;
をテーブルに記録し、...明らかに存在している場合でも、常にfalseに設定されるように思える無視される傾向にあります。..
table.fnSettings().aoData.length === 0が最良の選択肢ではないかもしれません。前もって感謝します。
を試すことができます。理由は完全にはわかりませんが、テーブルが空の場合でもsEmptyTable: 'このリクエストには資産レコードはありません。テーブルの行として... – msleone
実際にはtable.data()の長さは未定義です。 – msleone
使用しているデータベースのバージョンは?これは古代のバージョンでなければなりません... –