Сообщение от Erolast
|
С какой бы стати ему запускаться?
Проверяй код, наверно, где-то еще вызов рендера есть.
|
Первый раз плагин jQuery пишу, не знаю как это возможно, но я просто alert(1) туда вставлял без вызова render() и алерт срабатывал.
Сообщение от Erolast
|
Давай полный код.
|
Хорошо. Вот вызов плагина:
$(document).ready(function () {
$('#settings_grid').jsGrid({
dataset: {
ajaxUrl: '/jsgrid/settings'
},
controls: {
headerCreate: 'Добавить в настройки',
headerEdit: 'Редактировать',
isAdd: true,
isEdit: true,
isDelete: true,
pagination: 'double'
},
table: {
limit: 5,
orderBy: 'id',
order: 'asc'
},
columns: {
id: {
name: '',
isSearch: false,
isSearchStrict: true,
isSortable: true,
render: function (content) {
return '<td>' + content.id + '</td>';
}
},
type: {
name: 'Тип',
isSearch: false,
isSearchStrict: false,
isSortable: true,
render: function (content) {
return '<td>' + content.type + '</td>';
}
},
parameter: {
name: 'Параметр',
isSearch: false,
isSearchStrict: false,
isSortable: true,
render: function (content) {
return '<td>' + content.parameter + '</td>';
}
},
name: {
name: 'Имя',
isSearch: false,
isSearchStrict: false,
isSortable: true,
render: function (content) {
return '<td>' + content.name + '</td>';
}
},
value: {
name: 'Значение',
isSearch: false,
isSearchStrict: false,
isSortable: true,
render: function (content) {
return '<td>' + content.name + '</td>';
}
}
}
});
});
Полный код плагина:
/*
* JsGrid 0.0.1
*/
(function ($) {
var settings,
ajax,
dom,
defaults = {
dataset: {
ajaxUrl: null,
},
controls: {
headerCreate: null,
headerEdit: null,
isAdd: true,
isEdit: true,
isDelete: true,
pagination: 'bottom',
perPageOptions: [10, 20, 50, 100, 500],
totalName: 'Всего: ',
},
table: {
page: 1,
limit: 50,
orderBy: 'id',
order: 'asc',
searchColumn: null,
searchValue: null,
}
}
ajax = {
request: function (url, method, method_hidden, data) {
// Ajax запрос в контроллер
data['_method'] = method_hidden;
if (method == 'post') {
return $.post(url, data);
}
else {
return $.get(url, data);
}
},
index: function (settings) {
// Метод контроллера index
return this.request(settings.dataset.ajaxUrl, 'get', 'get', settings);
},
create: function (settings) {
// Метод контроллера create
return this.request(settings.dataset.ajaxUrl + '/create', 'get', 'get', settings);
},
store: function (settings) {
// Метод контроллера store
return this.request(settings.dataset.ajaxUrl, 'post', 'post', settings);
},
edit: function (settings) {
// Метод контроллера edit
return this.request(settings.dataset.ajaxUrl + '/' + settings.id + '/edit', 'get', 'get', settings);
},
update: function (settings) {
// Метод контроллера update
return this.request(settings.dataset.ajaxUrl + '/' + settings.id, 'post', 'put', settings);
},
destroy: function (settings) {
// Метод контроллера destroy
return this.request(settings.dataset.ajaxUrl + '/' + settings.id, 'post', 'delete', settings);
}
};
dom = {
render: function (container, settings) {
// Отображение данных
var request = ajax.index(settings);
request.done(function (result) {
// Элементы управления
var html = '<div>' + settings.controls.totalName + result.total + '</div>';
// Таблица
html += '<div class="table-responsive"><table class="table">';
// Заголовки
html += '<tr>';
for (var column in settings.columns) {
html += '<th>' + settings.columns[column].name + '</th>'
}
html += '<th></th></tr>';
// Контент
for (var row = 0; row < result.rows.length; row++) {
html += '<tr data-id="' + result.rows[row].id + '">';
for (var column in result.rows[row]) {
// html += '<td>' + result[row][column] + '</td>'
html += settings.columns[column].render(result.rows[row]);
}
html += '<td>';
if (settings.controls.isEdit) html += '<a href="#" class="jsgrid-edit"><i class="ficon-cog"></i></a>';
if (settings.controls.isDelete) html += '<a href="#" class="jsgrid-delete"><i class="ficon-cancel"></i></a>';
html += '</td></tr>';
}
html += '</table></div>';
container.append(html);
});
},
handlers: function (container, settings) {
container.on('click', '.jsgrid-delete', function (e) {
e.preventDefault();
settings.id = $(this).closest('tr').attr('data-id');
var request = ajax.destroy(settings);
request.done(function (result) {
});
});
}
}
$.fn.jsGrid = function (options) {
// Если плагин ещё не проинициализирован
if (!this.data('jsgrid')) {
settings = $.extend(true, {}, defaults, options);
this.data('jsgrid', settings);
// Обработчики событий
dom.handlers(this, settings);
}
else settings = this.data('jsgrid');
dom.render(this, settings);
}
})(jQuery);