JQuery UI виджет наследования - PullRequest
       3

JQuery UI виджет наследования

4 голосов
/ 02 сентября 2011

Мне нужно настроить виджет jquery ui. Я хотел изменить только метод «создать». Я написал новый виджет, унаследованный от виджета ui.automplete. Это отлично работает. Но как добавить новые события, такие как выбрать, щелкнуть, изменить? Разве нельзя добавить события в наследование виджетов?

$.widget("ui.my_autocomplete", $.ui.autocomplete, {

    _create: function() {
        //Here is my customized code
    },
    select: function( event, ui ) { // Not working!
        console.log("-- test my_autocomplete select: " );
        ui.item.option.selected = true;
        .....
    }, 
    change: function( event, ui ) { // Not working!
        console.log("-- test my_autocomplete change: " );
        .....
    }
});

ui.automplete методы JQuery ui 1.8:

$.widget( "ui.autocomplete", {
    options: {
        minLength: 1,
        delay: 300
    },
    _create: function() {
        ...
    },
    destroy: function() {
        ...
    },
    _setOption: function( key ) {
        ...
    },
    _initSource: function() {
        ...
    },
    search: function( value, event ) {
        ...
    },
    _search: function( value ) {
        ...
    },
    _response: function( content ) {
        ...
    },
    close: function( event ) {
        ...
    },
    _normalize: function( items ) {
        ...
    },
    _suggest: function( items ) {
        ...
    },
    _renderMenu: function( ul, items ) {
        ...
    },
    _renderItem: function( ul, item) {
        ...
    },
    _move: function( direction, event ) {
        ...
    },
    widget: function() {
        ...
    }
});

1 Ответ

4 голосов
/ 03 сентября 2011

Да, это возможно, но если вам нужны события, я думаю, что вы делаете это неправильно ... в настоящее время вы добавляете их как методы для вызова, например:

$('.selector').widget('select');

ЕслиВы хотите обычные события, вы можете прикрепить их к элементу напрямую.Так что в вашем методе _create выполните:

_create : function() {

   //Bind normal events
   this.element.click(function() {...});
   this.element.select(function() {...});

   //Howto fire a custom event
   this._trigger('myEvent', event, data);
});

Если вы хотите предоставить обратные вызовы для пользовательского примера события, вы можете сделать это, предоставив его опциям init или связавшись с ним:

$('.selector').bind('myWidgetmyEvent',function(event,ui) {...});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...