Показать сообщение отдельно
  #13 (permalink)  
Старый 17.07.2016, 16:21
Новичок на форуме
Отправить личное сообщение для PMaster Посмотреть профиль Найти все сообщения от PMaster
 
Регистрация: 16.07.2016
Сообщений: 9

Сообщение от 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);
Ответить с цитированием