Использование фабрики виджетов jQueryUI для расширения диалога - PullRequest
4 голосов
/ 09 октября 2011

Я использую фабрику виджетов jqueryUI для расширения диалогового виджета jqUI. Я установил самый простой виджет, который я могу придумать. Он ничего не делает, просто наследует от диалога. Тем не менее я не смог заставить его работать.

У меня есть скрипка, демонстрирующая это здесь: Просмотр скрипки

Вот тестовая разметка:

<div id="a">hello</div>
<div id="b">bye</div>

Вот JavaScript:

(function ($, undefined)
{
    var o =  //Widget prototype
    {
        options: {},

        _create: function ()  {},

        destroy: function ()
        {
            $.Widget.prototype.destroy.call(this);    
        },

        _setOption: function (key, value)
        {
            $.Widget.prototype._setOption.apply(this, arguments);
        },
    };

    //Run jQuery's widget factory to create the widget
    $.widget('cs.csDialog', $.ui.dialog, o);
} (jQuery));

//Test it out
$("#a").dialog(); //Works
$("#b").csDialog(); //Fails

Внутри jqUI я получаю следующую ошибку: this.uiDialog не определен

Я не вижу, что я сделал неправильно. Я был бы очень признателен за любую помощь. Спасибо.

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Причина того, что она не работает, как я написал в своем комментарии, заключается в том, что вы переписали функцию _create.

0 голосов
/ 19 марта 2018

Просто для будущих читателей, вот как вызывать базовую функцию _create, как упомянуто в комментариях.Ответ вдохновлен Уильямом Ниу ответом на другой вопрос.

   _create: function() {
       $.ui.dialog.prototype._create.call(this);
   }

Другой способ вызвать базовое _создание - добавить следующую строку кода в ваш метод:

this._super();
...