Сохранение состояния с использованием 2 экземпляров одного и того же плагина jQuery

StackOverflow https://stackoverflow.com//questions/21018553

Вопрос

Я кодирую плагин jQuery, чтобы построить сетки Kendoui. Все было хорошо, пока мне не пришлось использовать 2 экземпляра плагина на одной странице. В этом случае мне нужен каждый экземпляр плагина, чтобы иметь свои собственные данные.

Я прочитал рекомендации jQuery для хранения данных с помощью .data (), но при попытке доступа с внешнего кода плагина к «getSelecedItem ()» таким образом:

selectedItemGrid1= $("#Grid1").kendoGrid_extended.getSelectedItem();
selectedItemGrid2= $("#Grid2").kendoGrid_extended.getSelectedItem();
.

Я получаю выдокое значение GRID2 в SelectionItemgrid1. Вот упрощенная версия моего плагина. В основном то, что я хотел сделать, в любое время выбирается ряд сетки («изменение» события в определении кендогреда), сохраните новую выбранную строку внутри плагина, поэтому, когда пользователь нажимает кнопку «Удалить», прочитайте из Плагин выбранная строка и вызовите действия удаления с информацией, восстановленной из плагина.

$.fn.kendoGrid_extended = function (options) {
    var opts = $.extend({}, $.fn.kendoGrid_extended.defaults, options);
    opts.controlId = '#' + this.attr('id');
    var gridExtended;
    var selectedItem;
    var instance = $(this);

    //Public accessor for the selectedItem object.
    $.fn.kendoGrid_extended.getSelectedItem = function () {
        return instance.data('selectedItem');
    }

    opts.gridDataSource = new kendo.data.DataSource({
        type: "json",
        serverPaging: true,
        serverSorting: true,
        sort: sortObject,
        serverFiltering: true,
        allowUnsort: true,
        pageSize: opts.pageSize,
        group: opts.group,
        transport: {
            read: {
                url: opts.dataSourceURL,
                type: 'POST',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                data: function () { return opts.dataSourceParamsFunction(); }
            },
            parameterMap: function (options) {
                return JSON.stringify(options);
            }
        },
        schema: opts.dataSourceSchema,
    });

    gridExtended = $(opts.controlId).kendoGrid({
            columns: opts.gridColumns,
            dataSource: opts.gridDataSource,
            pageable: {
                refresh: true,
                pageSizes: true
            },
            groupable: opts.groupable,
            sortable: { mode: "multiple" },
            filterable: false,
            selectable: true,
            scrollable: true,
            resizable: true,
            reorderable: true,
            columnReorder: SetColumnsReorder,
            columnResize: SetColumnsResize,
            change: function () {
                var gridChange = this;
                gridChange.select().each(function () {
                    selectedItem = gridChange.dataItem($(this));
                    instance.data('selectedItem', selectedItem);
                });
            }
        });
}
.

Сам код это упрощенная версия моего плагина. Я знаю, что это может быть не лучшим способом написать плагин, который я прочитал руководящие принципы JQuery для разработки плагинов. Это было бы здорово, если бы вы могли указать мне правильное направление или сказать мне, почему мой код не работает. Спасибо большое заранее!

Это было полезно?

Решение 2

Я, наконец, решил его добавить скрытый вход с уникальным идентификатором к сетке помощника.На этом скрытом входе я храним все данные, которые я хочу быть постоянным с jQuery .data ().

Так что, если я генерирую 2 сетка, используя плагин, каждая сетка прилагала прилагающую что-то подобное:

<input type="hidden" id="uniqueIdHere" />
.

Другие советы

Я думаю, вам не нужен, что «публичный аксессуар», который вы написали, я думаю, что вы на самом деле можете получить это так:

 selectedItemGrid1= $("#Grid1").data('selectedItem);
 selectedItemGrid2= $("#Grid2").data('selectedItem);
.

На стороне вам не нужно обернуть, что экземпляр Элемент в объект jQuery .Вы все еще сможете использовать остальные методы jQuery, проверьте пример.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top