2010-05-24 3 views
6

Я написал JQuery-UI виджета с помощью виджетов Factory ...Определить, если элемент является jQueryUI Widget

мне нужно, чтобы быть в состоянии определить в коде ли элемент уже виджет или нет .. .

My investmentGrid виджет создан на #container с

$('#container').investmentGrid() 

мне нужно, чтобы быть в состоянии определить, в другом месте в коде, если $ ('# контейнер') уже является investmentGrid

ответ

6

Вы можете запросить jQuery.data() функцию элемента, например, так:

if ($('#container').data('investmentGrid')) { 
    ... 
} 
1

@Boycs: По моему мнению, использование Widget Factory защищает вас от создания экземпляра плагина несколько раз на том же элементе. (Ссылка: http://jqueryui.pbworks.com/widget-factory)

Кроме того, если вы хотите, чтобы проверить, действительно ли «контейнер» уже инвестиции сетки, вы можете попробовать следующий вариант внутри кода плагина:

this.element.data (» investmentGrid ") === это;

Для получения более подробной информации Вы можете обратиться к docs.jquery.com/UI_Developer_Guide

+0

Спасибо ... Возможно, мне не ясно было в моем первоначальном вопросе ...Мне нужно иметь возможность определять из-за пределов моего кода плагина, действительно ли $ ('# container') уже является инвестиционнымGrid или нет ... – Boycs

+0

Можете ли вы поделиться со мной, почему вам нужно будет установить, является ли «контейнер» уже investGrid или нет? Это поможет мне ответить более точно. благодаря –

5

Вы можете попробовать селектор псевдо, который созданный для вас при использовании фабрики виджета. $(":namespace-widgetname")

3

@ dan-story, возможно, имел ответ в то время, когда он ответил на это, но я обнаружил, что этот метод больше не работает. Ну, не совсем. По крайней мере, не с jQueryUI 1.10. Согласно документации по адресу http://api.jqueryui.com/jQuery.widget/ в разделе «Экземпляр» вам теперь нужно иметь полное имя виджета.

Например, если вы создаете свой виджет завод с этим:

$.widget("Boycs.investmentGrid", ...); 

Затем, чтобы проверить, если контейнер имеет, вы бы проверить с этим:

if ($('#container').data('Boycs-investmentGrid')) 
{ 
    ... 
} 

Это уже не достаточно просто использовать имя.

1

Текущие версии jQuery UI (я могу подтвердить это с помощью 1.11.x) позволяют запрашивать экземпляр виджета с помощью метода instance(). Это будет выглядеть следующим образом:

$('#container').investmentGrid('instance') 

Если элемент не имеет investmentGrid виджета назначен, вы получите undefined обратно.

Вы также можете использовать вместо этого позвонить:

$(#container').is(':data("namespace-investmentGrid")') 

Это имеет то преимущество, что он также работает даже тогда, когда виджет не загружается.

Смежные вопросы