Мост виджета jQuery на не функциональном объекте

В рамках обновления с jQuery 1.6.4 до 1.9.x я пытаюсь понять, как использовать мост виджетов jQuery, чтобы разрешить доступ к функциям для виджетов, созданных как отдельный объект, а не как расширение jQuery.

Во всех примерах ( например, в этом) в качестве исходного определения объекта используется функция-прототип, которая, кажется, не соответствует определению объекта непосредственно из определения на основе {}.

Например, я определяю виджет следующим образом:

var ControlPanel = {

    instance: null,

    options: {
        //Some options here
    },

    simpleFunction: function(){
        alert("I am a function");
    },

    _init: function() {
        //Some init stuff here
    }
}

$.widget("basereality.controlPanel", ControlPanel); // create the widget

//This doesn't appear to work...
$.widget.bridge('controlPanel', $.basereality.controlPanel); //'Bridge' the widget

А затем создать его экземпляр, выполнив:

var controlPanelParams = {
  // some options go here
};

var newControlPanel = $('#controlPanel').controlPanel(controlPanelParams);

Теперь я хотел бы иметь возможность вызывать метод simpleFunction для созданного объекта, что я пытался сделать, выполнив:

newControlPanel.simpleFunction();
//and 
$(newControlPanel).simpleFunction();

Оба из них дают "Объект не имеет метода с именем simpleFunction" ошибка.

Так что же я делаю не так и как вы собираетесь использовать $.widget.bridge на объектах, не основанных на функциях?

1 ответ

Решение

Я думаю, что я понял это. Вместо этого:

$(newControlPanel).addControl(smartyControlPanel);

Получите доступ к функции, вызывая ее как параметр, подобный этому:

newControlPanel.controlPanel("addControl", smartyControlPanel);

И я также преобразовал свой код, чтобы он основывался на функции для первого прототипа:

var ControlPanel = function(options, element){
    this.options = options;
    this.element = element;

    this._init();
};

ControlPanel.prototype = {
    //Everything else in here
}

Хотя необходимость вызывать его как параметр гораздо проще понять, чем вызывать его напрямую как функцию.

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