Я использую "bServerSide": true, "sAjaxSource": и "fnServerData": ... для заполнения таблицы данных. Это работает нормально.
"bFilter": true,
"bSort": true,
"bSortClasses": true,
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "my_page_that_outputs_json.asp",
"fnServerData": function ( sSource, aoData, fnCallback ) {
aoData.push( { "name": "my_custom_var" , "value": $('#someCustomVar').val() } );
$.getJSON( sSource, aoData, function (json) {
fnCallback(json);
} );
},
Однако, когда я звоню на сервер, я хочу вернуть больше, чем просто JSON со страницы, соединяющейся с сервером. У меня есть дополнительные наборы записей, которые я хотел бы вернуть с помощью всего одного вызова базы данных, но возможно ли это в рамках datatables? Страница, выводящая JSON, когда извлекается из таблицы данных, ожидает только JSON и выдает ошибку, когда присутствуют любые другие элементы.
Обновление 1: не знаю, является ли это правильным маршрутом,
но теперь я думаю, что один из вариантов будет использовать таблицы данных
функция скрытых столбцов. http://www.datatables.net/examples/basic_init/hidden_columns.html
Я полагаю, вы могли бы поместить элементы с идентификаторами в одну ячейку в скрытом столбце,
а затем получить доступ к информации идентификатора через JQuery.
Обновление 2: Может быть, так могут другие элементы на родительской странице
быть обновленным из элементов на странице ответов JSON (я также изложил это
проблема на форуме datatables, без ответа):
добавить и включить идентификаторы для каждого скрытого ввода
в первом ряду данных JSON
не пытайтесь скрыть столбцы, потому что элементы кажутся недоступными
когда колонка скрыта. (если я ошибаюсь, кто-то, пожалуйста, сообщите ...)
, если скрытый ввод нужно обработать только один раз, тогда сделайте это
доступ к скрытому вводу через jQuery на родительской странице
Обновление 3: @ JM4 - я не знаю, что это конкретно решит ваш вопрос,
но я смог использовать скрытый маршрут ввода - например, <input type="hidden id="myCustomID_012" />
- и выполнить то, что мне нужно было сделать.
Я использовал функцию, подобную следующей, для обработки щелчка строки.
Эта функция была за пределами сборки dataTable.
function clickRowHandler() {
/* Highlight selected row on single click */
$('.tblIntrepid tbody tr').click(function(event) {
$(oTable.fnSettings().aoData).each(function (){
$(this.nTr).removeClass('row_selected');
});
// update the myIntrepidID value for form "complete" submission
// myIntrepidID was already on the page, not in the dataTable
var myNewIntrepidID = $(this).find("td:first input").val();
$('#myIntrepidID').val(myNewIntrepidID);
// set the row class
$(event.target.parentNode).toggleClass('row_selected');
});
/* more details */
}
Внутри сборки dataTable была вызвана функция clickRowHandler в
таким образом:
"fnDrawCallback": function() {
clickRowHandler();
},
Кроме того, я не могу вспомнить, где я видел это на форуме DataTables
(вероятно, началось здесь: http://datatables.net/forums/comments.php?DiscussionID=3931)
но другой путь, который вы можете использовать, это вывод данных JSON выше и выше
какие dataTables требует. Итак, пока вам нужно вывести JSON, который включает в себя
"sEcho" и "iTotalRecords" и "iTotalDisplayRecords" и "aaData",
Вы также можете создавать свои собственные пары имя / значение.
Если у вас был список из 10 имен пользователей, которые вы хотели в выпадающем списке
в заголовке таблицы вы можете построить пару имя / значение на месте
Вы создаете свой JSON и называете его «selectUserNames». Тогда в вашем
сборка dataTables, вы бы превратили этот пользовательский объект json в свой список
(Я не отображаю все функции здесь):
Эта функция вне сборки dataTables создает выпадающий список.
// http://datatables.net/forums/comments.php?DiscussionID=3931&page=1#Item_6
function fnCreateSelect( aData ) {
var r='<select><option value=""></option>', i, iLen=aData.length;
//alert(iLen);
for ( i=0 ; i<iLen ; i++ )
{
r += '<option value="'+aData[i]+'">'+aData[i]+'</option>';
}
return r+'</select>';
}
А внутри dataTables build ...
$.getJSON( sSource, aoData, function (json) {
if ( json.sEcho == 1 ) {
$("thead td.search").each( function () {
/* Insert the select menu */
this.innerHTML = fnCreateSelect(json.selectUserNames);
/* Add the event listener for the newly created element */
$('select', this).change( function () {
oTable.fnFilter( $(this).val(), 8 );
});
});