私はいくつかのjavascript/jqueryコードをajaxタブを処理できるように変換しようとしています。
ページが読み込まれるときにすべてのスクリプトが読み込まれ、jqueryliveおよびlivequeryプラグインを使用してバインディングを支援します。
毎回部分ビュー(asp.net mvc 3)にあり、クリックするとコントローラーアクションに移動し、部分ビューをレンダリングしてタブに貼り付けます。
したがって、liveとlivequeryは、この1つの問題を除いてほとんどの問題を解決しています。私はjquerydatatables.netプラグインを使用しており、それがレンダリングされたら、それを変数に格納して配置します。
モジュールパターンを使用しているので、テーブルがレンダリングされるずっと前にコードが実行されます。したがって、オブジェクトを格納する変数は「未定義」です。jquery livequeryステートメントでラップアラウンドしようとしましたが、テーブルは実行されますが、変数はまだ「未定義」です。
私の推測では、C#は参照を更新するのとは異なります。したがって、それは私のグローバル変数(モジュールパターン用のもの)にあり、更新されることはないと考えています。
var tab = (function (my, $)
{
var myTable = my.dataTable = my.dataTable || {};
myTable.oDataTable = {};
myTable.init = function ()
{
myTable.oDataTable = _fnSetupTable();
_fnCreateDateFilters();
};
myTable.delete= function (rowToDelete)
{
// Need to get the position of the row. Need to use index
var pos = this.oDataTable.fnGetPosition(rowToDelete[0]);
/* delete row from table - first param is index of row */
this.oDataTable.fnDeleteRow(pos, null, true);
};
function _fnSetupTable()
{
/* Initialize datatable object */
$('#table').livequery(function ()
{
// oDataTable gets used in alot of places later on but since it undefined
// it will crash when used.
var oDataTable = $(this).dataTable(
{
"bJQueryUI": true,
"bFilter": true,
"bAutoWidth": false,
"sPaginationType": "full_numbers",
"aaSorting": [[3, 'asc']], //Default sorting on datetime
"oLanguage":
{
"sZeroRecords": "No Records"
},
"aoColumns":
[
{ "bSortable": true, "bSearchable": false },
{"bSortable": true, "bSearchable": false },
{"bSortable": false, "bSearchable": false },
{"bSortable": false, "bSearchable": false },
{"iDataSort": 3 },
{ "bSortable": false, "bSearchable": true },
{"bSortable": false, "bSearchable": false },
{"bSortable": false, "bSearchable": false}
]
});
return oDataTable;
});
}
return my;
} (tab || {}, jQuery));
私はoDataTableをかなり使用しています。myTable.Deleteを呼び出すかどうかを確認できるように、そこでoDataTableを使用しますが、「未定義」でクラッシュします。
シーケンス全体を開始する別のモジュールクラスがあります(したがって、上記のコードを実行します)
/*
* Document Ready
*/
$(function ()
{
/* Initializes all plugins and events */
tab.init();
});
var tab = (function (my, $)
{
my.init = function ()
{
tab.preload();
tab.dataTable.init();
$('#tabs').tabs();
};
return my;
} (tab || {}, jQuery));