아약스 탭을 처리 할 수 있도록 일부 javascript/jquery 코드를 변환하려고합니다.ajax로 javascript 모듈 패턴을 작동시키는 방법은 무엇입니까?
페이지가로드 될 때 모든 스크립트가로드되고 jquery live 및 livequery 플러그인을 사용하여 바인딩에 도움이됩니다.
각 시간은 부분보기 (asp.net mvc 3)에 있으며 클릭하면 컨트롤러 동작으로 이동하여 부분보기가 렌더링되어 탭에 고정됩니다.
라이브 및 라이브 쿼리는이 문제를 제외한 대부분의 문제를 해결합니다. jquery datatables.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));
내가 그렇게하면 범위를 잃지 않을 것입니까? 나는 그것이 삭제에서 그것을 부를 필요가 있다는 것을 의미하고 그것이 그 함수에 있다면 그것을 볼 수 없을 것인가? – chobo2
@ chobo2 - 나는 실제 문제를보다 분명하게하려고 편집했다. 요점은'var oDataTable = $ (this) .dataTable()'은'livequery'에 주어진 함수의 로컬 변수이고'return' 문은'_fnSetupTable'이 아닌 * that * 함수에서 리턴한다는 것입니다. . –
@ chobo2 - 귀하의 범위에 대한 질문이 확실하지 않습니다.모듈 패턴의 변수 범위와 일반적으로 자바 스크립트에 대해 조금 혼란스러워하는 것 같습니다. –