Вызов метода расширенного виджета jquery

У меня есть виджет jquery, как это:

$.widget("ui.MyWidget", {
              options: {            
            Value1: 10,
            Value1: 20,
        },
// and other methods like _create,...
});

И я расширяю это так:

$.widget("ui.MyExtWidget", $.extend({
            options: {
            Value3: 20,
        }}, $.ui.MyWidget.prototype, {
        myNewMethod: function(){
            alert(this.options.Value1+this.options.Value3);
        }
}

Я должен назвать "myNewMethod" в моем HTML.

Мой HTML-код выглядит так:

$("#Div1").MyExtWidget();
$("#Div1").MyExtWidget("myNewMethod");

Я получаю исключение, подобное этому, хотя использование приведенного выше кода не может вызывать методы TimeSpanHeader до инициализации; попытался вызвать метод myNewMethod

Как вызвать метод myNewMethod?

1 ответ

Решение

Фабрика виджетов позволяет расширять существующий виджет с помощью $.widget конструктор:

$.widget("ui.MyExtWidget", $.ui.MyWidget, {
    options: {
        alertText: ''
    },
    myNewMethod: function() {
        alert('Value1 = ' + this.options.Value1);
        alert('alertText = ' + this.options.alertText);
    }
});

Примечание. Конструктор также позаботится о расширении параметров. Этот метод используется в самой библиотеке jQuery UI. Например, виджет ui.mouse имеет параметры, и многие другие виджеты наследуются от него и имеют свои собственные дополнительные параметры наряду с параметрами из ui.mouse.

DEMO


Из вики-сообщения Фабрики Виджетов:

Фабрика виджетов - это простая функция глобального объекта jQuery - jQuery.widget, которая принимает 2 или 3 аргумента.

jQuery.widget ("namespace.widgetname", / * необязательно - существующий прототип виджета для наследования от /, / литерал объекта, который станет прототипом виджета */ {...});

Второй (необязательный) аргумент - это прототип виджета для наследования. Например, в jQuery UI есть плагин "мыши", на котором основаны остальные плагины взаимодействия. Чтобы добиться этого, перетаскиваемый, сбрасываемый и т. Д. Все наследуются от плагина мыши следующим образом: jQuery.widget( "ui.draggable", $.ui.mouse, {...}); Если вы не укажете этот аргумент, виджет будет наследоваться непосредственно от "базового виджета" jQuery.Widget (обратите внимание на разницу между строчным "w" jQuery.widget и прописным "W" jQuery.Widget).

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