jQuery dataTables-как добавить опцию редактирования и удаления



У меня есть следующий код: http://jsfiddle.net/5ooyertu/1/



Прямо сейчас таблица заполняется должным образом через серверную сторону, и моя подкачка работает. Но я хотел бы добавить возможность удалять и редактировать строки. Я хотел бы добавить столбец под названием "Действия", который имеет два - один метод редактирования... а другой методу удаления.



До использования dataTables у меня была некоторая логика JavaScript, которая перебирала массив записей из Ajax, вызывала и заполните регулярную таблицу данными и соответствующими гиперссылками.



 for (var i=0; i < data.length; i++) {
if (data[i].grp == 0) {
tr.append("<a href='add.html?id=" + data[i].id + "&pid=" + data[i].pid + "&destination=" + data[i].destination + "&name=" + data[i].name.replace("'", "%27") + "'</a><button class='btn btn-xs btn-primary'>Edit</button>&nbsp;</td>");
tr.append("<button class='btn btn-xs btn-primary' onclick='delete(" + data[i].id + "," + data[i].pid + ");'>Delete</button></td>")

} else {
tr.append("<a href='update_group.html?id=" + data[i].id + "&pid=" + data[i].pid + "&destination=" + data[i].destination + "&name=" + data[i].name.replace("'", "%27") + "'</a><button class='btn btn-xs btn-primary'>Edit</button>&nbsp;</td>");
tr.append("<button class='btn btn-xs btn-primary' onclick='delete(" + data[i].id + "," + data[i].pid + ",true);'>Delete</button></td>")
}
}


Как вы можете видеть из приведенного выше примера кода, в моих гиперссылках мне нужно передать несколько фрагментов данных из каждой строки, либо как часть строки запроса (в случае редактирования), либо просто передать их в качестве параметров другой функции JavaScript под названием "delete", которая живет в том же файле, что и эта dataTable. И это условно... это означает, что гиперссылки будут меняться в зависимости от того, является ли grp истинным / ложный.

Мне интересно, как я могу изменить логику, которая заполняет dataTable, чтобы теперь включить эти две гиперссылки?

Я нашел эту ссылку: http://datatables.net/forums/discussion/5862/creating-an-action-column-for-icons-view-edit-delete# но код не работал для меня, и я думаю, что где-то читал, что метод fnRender теперь устарел.



Если у вас есть какие-либо предложения, я буду признателен.

EDIT 1



Я попытался изменить свой код чтобы выглядеть так:



$(document).ready(function() {
var selected = [];
$('#users').DataTable( {

"serverSide": true,
"ordering": false,
aLengthMenu: [
[10, 25, 50, 100, "-1"],
[10, 25, 50, 100, "All"]
],
"ajax": "/cgi-bin/test",
"rowCallback": function( row, data ) {
if ( $.inArray(data.DT_RowId, selected) !== -1 ) {
$(row).addClass('selected');
}
},
"columns":
[
{ "data": "id" ,"searchable":false},
{ "data": "name","searchable":true},
{ "data": "pid", "searchable":true },
{ "data": "destination", "searchable":true },
{"mRender": function ( data, type, row ) {
return '<a href=add.html?id="'+row[0]+'">Edit</a>';}
}
]
} );

} );


Обратите внимание на ссылку вызова render. Я также добавил новый столбец в мою таблицу в моем html-коде. Я действительно получаю гиперссылку! Но, к сожалению, ссылка неверна. строка[0] возвращает значение "undefined". Кроме того, я до сих пор не знаю, как изменить гиперссылку, которую я создаю, в зависимости от значения поля "назначение".
Так, например, я хочу сделать что-то вроде этого: (псевдокод)



if row[i].destination = 'Group' then
{"mRender": function ( data, type, row ) {
return '<a href=group.html?id="'+row[0]+'">Edit</a>';}
}
else
{"mRender": function ( data, type, row ) {
return '<a href=add.html?id="'+row[0]+'">Edit</a>';}
}
end


EDIT 2



Похоже, этот код работает.:



$(документ).готово (функция() {
var selected = [];
$('#пользователи').DataTable( {



        "serverSide": true,
"ordering": false,
aLengthMenu: [
[10, 25, 50, 100, "-1"],
[10, 25, 50, 100, "All"]
],
"ajax": "/cgi-bin/test",
"rowCallback": function( row, data ) {
if ( $.inArray(data.DT_RowId, selected) !== -1 ) {
$(row).addClass('selected');
}
},
"columns":
[
{ "data": "id" ,"searchable":false},
{ "data": "name","searchable":true},
{ "data": "pid", "searchable":true },
{ "data": "destination", "searchable":true },
{"mRender": function ( data, type, row ) {
return '<a href=add.html?id='+row.id+'>Edit</a>';}
}
]
} );


Теперь мне просто нужно понять, как сделать его условным.
582   3  

3 ответов:

Здесь у вас есть пример, предполагающий следующее:

  • население Ajax
  • Строка данных-это массив, содержащий 4 столбца
  • ваша строка данных содержит идентификатор в первом столбце
  • вы не отображаете id на таблице, поэтому вы скрываете его

Это не должно быть трудно адаптировать его к вашим потребностям. Проверка columns использование

var datatablesOptions = {
    "serverSide": true,
    "ajaxSource": '[yourAjaxUrl]',
    "processing": true,
    "columns": [
        { bVisible = false }, // assume this is the id of the row, so don't show it
        null,
        null,
        null,
        /* EDIT */ {
            mRender: function (data, type, row) {
                return '<a class="table-edit" data-id="' + row[0] + '">EDIT</a>'
            }
        }
        /* DELETE */ {
            mRender: function (data, type, row) {
                return '<a class="table-delete" data-id="' + row[0] + '">DELETE</a>'
            }
        },              
     ]
};
$('#table').dataTable(datatablesOptions);

EDIT

В случае, если вам нужно условно сделать что-то другое в зависимости от destination Вы могли бы сделать

mRender: function (data, type, row) {
    if (row.destination == "d1") {
        return '<a href="destination1?id=' + row.id + '">EDIT</a>'
    }else (row.destination == "d2"){
        return '<a href="destination2?id=' + row.id + '">EDIT</a>'
    } else {
        // some error telling that destination value is unexpected
    }
}

Взгляните на мой фрагмент колонки часть

columns: [
    { 'data': 'LastName' },
    { 'data': 'FirstMidName' },
    { 'data': 'EnrollmentDate' },
    {// this is Actions Column 
        mRender: function (data, type, row) {
            var linkEdit = '@Html.ActionLink("Edit", "Edit", new {id= -1 })';
            linkEdit = linkEdit.replace("-1", row.ID);

            var linkDetails = '@Html.ActionLink("Details", "Details", new {id= -1 })';
            linkDetails = linkDetails.replace("-1", row.ID);

            var linkDelete = '@Html.ActionLink("Delete", "Delete", new {id= -1 })';
            linkDelete = linkDelete.replace("-1", row.ID);

            return linkDetails + " | " + linkEdit + " | " + linkDelete;
        }
    }

А это фрагмент из моего Json

{ID: 1, LastName: "Alexander", FirstMidName: "Carson", EnrollmentDate: "/Date(1126386000000)/",…}

Примечание заметьте, что я использую ASP.Net в MVC, так Html.ActionLink просто возвращает ссылку

И результаты таковы: Введите описание изображения здесь

DataTables поддерживает операции редактирования и удаления. Удалить довольно просто, например:

$('#id tbody').on('click', function(){
    table
        .row($(this).parents('tr'))
        .remove()
        .draw();
});

Проверьте этот пример: https://editor.datatables.net/examples/simple/inTableControls.html

Comments

    Ничего не найдено.