получить объект div, который содержит виджет jquery из виджета - PullRequest
4 голосов
/ 23 января 2012

У меня есть следующий код:

<div id="widHolder"></div>
<script type="text/javascript" language="javascript">
    $('#widHolder').widgetName({
        optionOne: false,
        optionTwo: 1,
        onComplete: function (holder) { 
            // ... do something here with the 'widHolder' object such as $(holder).addClass(x,y) 
        }
    });
</script>

Внутри самого виджета метод onComplete будет вызываться сразу после полной инициализации виджета.Я хочу, чтобы код в виджете ссылался на объект, с которым связан виджет (в данном случае это div с идентификатором 'widHolder').

Моя цель - иметь возможность быстро и легко ссылаться на объект удержания, создавая функцию oncomplete, как указано выше.Код в самом виджете будет просто вызывать функцию onComplete, передавая держатель (который мне нужно получить) в качестве параметра.

Вот пример кода плагина jQuery UI Widget

(function ($) {
    $.widget("ui.widgetName", {
        options: {
            // ... other options that can be set
            onComplete: undefined
        },

        // called on the initialization of the widget
        _init: function () {
            // do initialization functions...

            if(this.options.onComplete)
                this.options.onComplete( I_WANT_TO_SEND_THE_DOM_ELEMENT_HERE );
        },
    }
})

Ответы [ 2 ]

6 голосов
/ 23 января 2012

JQuery UI Widget Factory делает элемент доступным через:

this.element с помощью плагина.

Для получения дополнительной информации, пожалуйста, посмотрите здесь: http://wiki.jqueryui.com/w/page/12138135/Widget%20factory

Это лучше отвечает на ваш вопрос?

(function ($) {
    $.widget("ui.widgetName", {
        options: {
            // ... other options that can be set
            onComplete: undefined
        },

        // called on the initialization of the widget
        _init: function () {
            // do initialization functions...

            if(this.options.onComplete)
                this.options.onComplete( this.element );
        },
    }
})

Примечание: если вы создадите другое закрытие внутри своего плагина, вам нужно будет сохранить ссылку на this.Например:

(function ($) {
    $.widget("ui.widgetName", {
        options: {
            // ... other options that can be set
            onComplete: undefined
        },

        // called on the initialization of the widget
        _init: function () {
            // do initialization functions...
            var self = this;
            $.each(an_array_or_something_obj, function(){
                //here this will refer to the current element of the an_array_or_something_obj
                //self will refer to the jQuery UI widget
            });
            if(this.options.onComplete)
                this.options.onComplete( this.element );
        },
    }
})
0 голосов
/ 23 января 2012

Используйте this.offsetParent, если, как в вашем примере, держатель является прямым родителем виджета.

...