Мост виджета 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
}
Хотя необходимость вызывать его как параметр гораздо проще понять, чем вызывать его напрямую как функцию.