Есть ли способ по умолчанию получить внутреннее свойство в виджете jQueryUi? - PullRequest
1 голос
/ 24 марта 2010

Я использую существующий виджет из меню выбора вызова jquery-ui labs. У него есть опции обратного вызова для событий закрытия и открытия. Проблема в том, что мне нужно в этом случае анимировать узел, который является частью виджета, но не то, с чем он связан. Для этого мне нужен доступ к этому узлу.

например, если бы я на самом деле изменил сам код виджета:

// ... other methods/properties

"open" : function(event){
    // ... the original logic

    // this is my animation
    $(this.list).slideUp('slow'); 

    // this is the orginal call to _trigger
    this._trigger('open', event, $this._uiHash());
},

// ... other methods/properties

Однако, когда в области действия обработчика событий я присоединяю this, это оригинальный элемент, который я назвал виджетом. Мне нужен экземпляр виджета или, в частности, свойство list экземпляра виджета.

$('select#custom').selectmenu({
    'open': function(){
       // in this scope `this` is an HTMLSelectElement not the ui widget
     }
});

Как лучше всего получить свойство list от виджета?

РЕДАКТИРОВАТЬ : обратите внимание, я разместил мое окончательное решение ниже. Однако мне не нравится возвращаться в DOM, чтобы получить элемент, поэтому я по-прежнему заинтересован в том, чтобы услышать лучшие практики по переопределению / расширению существующего виджета или определенных внутренних компонентов.

1 Ответ

1 голос
/ 24 марта 2010

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

jQuery(function(){
    jQuery('select#custom').selectmenu({
        width: 100, 
        'style': 'dropdown',
        "open": function(e, data){
            var menu = jQuery('ul#'+$(this).attr('id')+'-menu');
            menu.hide().slideDown('slow');
        },
        "close": function(e, data){
            var menu = $('ul#'+jQuery(this).attr('id')+'-menu');
            menu.addClass('ui-selectmenu-open').slideUp('slow', function(){
                menu.removeClass('ui-selectmenu-open');
            });

        },
        "change": function(){window.location = $(this).val();}
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...