/ / Визначте, чи є елемент віджетом jQueryUI - jquery-ui, віджет

Визначте, чи елементом є віджет jQueryUI - jquery-ui, віджет

Я написав віджет jquery-ui, використовуючи Widget Factory ...

Мені потрібно мати можливість визначити в коді, є елемент уже віджетом чи ні ...

Мій віджет InvestmentGrid створений на #container with

 $("#container").investmentGrid()

Мені потрібно мати можливість визначити в іншому місці коду, чи $ ("# контейнер") вже є InvestmentGrid

Відповіді:

6 за відповідь № 1

Ви можете запитати елемент "s jQuery.data() функція, наприклад:

if ($("#container").data("investmentGrid")) {
...
}

5 для відповіді № 2

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


3 для відповіді № 3

@ dan-story, можливо, мав відповідь у той час, коли вінвідповів, але я виявив, що цей метод вже не працює. Ну, не повністю. Принаймні, не з jQueryUI 1.10. Згідно з документацією на http://api.jqueryui.com/jQuery.widget/ у розділі "Екземпляр" тепер потрібно мати повне ім'я віджета.

Наприклад, якщо ви створюєте свою фабрику віджетів за допомогою цього:

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

Потім, щоб перевірити, чи є в контейнері, слід перевірити це:

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

Вже недостатньо просто використовувати назву.


1 для відповіді № 4

@Boycs: За моїм розумінням, використання Widget Factory захищає вас від інсталяції плагіна кілька разів для одного елемента. (посилання: http://jqueryui.pbworks.com/widget-factory)

Крім того, якщо ви хочете підтвердити, чи "контейнер" вже є інвестиційною сіткою, ви можете спробувати наступну опцію з коду плагіна:

this.element.data ("Інвестиційна сітка") === це;

Для отримання додаткової інформації ви можете звернутися до docs.jquery.com/UI_Developer_Guide


1 для відповіді № 5

Поточні версії інтерфейсу jQuery (я можу підтвердити це за допомогою 1.11.x) дозволяють запитувати екземпляр віджета через instance() метод. Потім це виглядатиме так:

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

Якщо елемент не має investmentGrid віджет призначений, ви отримаєте undefined назад

Ви можете замість цього використовувати дзвінок:

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

Це має ту перевагу, що він також працює навіть тоді, коли віджет не завантажений.