Функция вызова из jquery плагин код котельной пластины

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

    (function ($, window, document) {
    'use strict';

    // constructor
    var SearchableOptionList = function ($element, options) {
        this.$originalElement = $element;
        this.options = options;

        this.metadata = this.$originalElement.data('sol-options');
    };

    // plugin prototype
    SearchableOptionList.prototype = {

        DATA_KEY: 'sol-element',

        // default option values
        defaults: {            
            ... 
        },

        // initialize the plugin
        init: function () {
            this.config = $.extend(true, {}, this.defaults, this.options, this.metadata);

            ...

            return this;
        },

        //some functions
        ...

        selectAll: function () {
            ...
        },

        deselectAll: function () {
            ...
        },

        getSelection: function () {
            return this.$selection.find('input:checked');
        }
    };

    // jquery plugin boiler plate code
    SearchableOptionList.defaults = SearchableOptionList.prototype.defaults;
    window.SearchableOptionList = SearchableOptionList;

    $.fn.searchableOptionList = function (options) {
        var result = [];
        this.each(function () {
            var $this = $(this),
                $alreadyInitializedSol = $this.data(SearchableOptionList.prototype.DATA_KEY);

            if ($alreadyInitializedSol) {
                result.push($alreadyInitializedSol);
            } else {
                var newSol = new SearchableOptionList($this, options);
                result.push(newSol);

                setTimeout(function() {
                    newSol.init();
                }, 0);
            }
        });

        if (result.length === 1) {
            return result[0];
        }

        return result;
    };

}(jQuery, window, document));

Полный код вы можете найти на GitHub.

Я пытаюсь призвать getSelection функция как ниже:

// initialize sol
    var s = $('#my-select').searchableOptionList({
        maxHeight: '150px',
        showSelectAll: true
    });

    s.selectAll();

Я получаю ошибку:

TypeError: this.config is undefined

Можно ли вызывать функции, используя этот шаблон котельной плиты?

Вы можете поиграть на jsfiddle

1 ответ

Решение

Я считаю, что строка 1031 является виновником

        setTimeout(function() {
            newSol.init();
        }, 0);

Поскольку инициализация отложена, код не готов, когда вы вызываете его сразу. Самое сложное - это отложить ваш вызов, но нет гарантии, что он будет инициализирован.

setTimeout(function(){s.selectAll()},1000);

Лучшее решение - использовать события плагина, чтобы подключиться к моменту его инициализации.

$('#my-select').searchableOptionList({
  maxHeight: '150px',
  events: {
    onInitialized: function() {
      this.selectAll();
    }
  }
});

играть на скрипке

Другие вопросы по тегам