Я написав віджет 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")")
Це має ту перевагу, що він також працює навіть тоді, коли віджет не завантажений.