Открытая функция виджета jQuery
Итак, у меня есть два разных виджета jquery, которые используют функцию ajax для обновления страницы без обновления. Это связано с базой данных, и виджеты проверяют, изменились ли данные кем-то еще с момента загрузки страницы. Если виджеты завершают обновление, то он обновляет время загрузки во внутренней переменной, так что если пользователь выполняет другое редактирование с использованием этого виджета, он будет знать, что это сделал текущий пользователь, и пользователь может выполнить любое количество последующих изменения (все еще проверяя, был ли он изменен кем-то другим).
Это прекрасно работает, когда все изменения находятся в одном экземпляре виджета. Однако виджетам необходимо знать, когда другие виджеты в документе внесли действительные изменения.
Я знаю, что могу использовать localStorage (который, пожалуй, самый беспроблемный), но я хотел знать, как общаться между виджетами с помощью открытых методов.
Я посмотрел здесь: http://www.gmarwaha.com/blog/2011/09/30/jquery-ui-calling-widget-methods-directly/ но все еще не могу получить доступ к нужной мне функции.
Итак (это упрощенно) я получил:
$.widget( 'mynamespace.widget1', {
options: {...},
_create: function() {...},
getLoadedAt: function() {...}, //the function I want to be public
...
}
а также:
$.widget( 'mynamespace.widget2', {
options: {...},
_create: function() {...},
getLoadedAt: function() {...},
...
}
Я хочу получить доступ к функции getLoadedAt от каждого.
Я могу получить доступ к экземпляру каждого виджета из элементов, с которыми они связаны (или, по крайней мере, я думаю, что смогу, это возвращает определение функции, а не неопределенное):
$('.el1').widget1;
$('.el2').widget2;
Однако если я сделаю:
$('.el1').widget1();
Я получаю элемент, к которому прикреплен виджет. Если я попробую (по ссылке выше):
$('.el1').widget1().data();
Я получаю данные, которые принадлежат элементу, а не экземпляру виджета.
В приведенной выше ссылке я не знаю, что относится к "опциям" (этот тип приводит меня к мысли, что он пытается создать новый виджет, но я хочу получить доступ к уже существующему виджету. Я не совсем понимаю, что здесь происходит). Если я попробую как предложено:
var $myinstance = $('.el1').widget1();
//here^^^ 'options' is passed in in the example but I've left it out
$myinstance.widget1('getLoadedAt');
Затем возвращается элемент, с которым связан виджет.
По сути, это выглядит как $('. El1'). Widget() возвращает только элемент. Урок с 2011 года, так что я не знаю, если что-то изменилось. Возможно, это не то, что jQuery позволяет вам делать больше, я не знаю. Скорее всего, я сделал что-то не так.
Любопытно, что в DOM элемент, с которым связан виджет, содержит два объекта с именем jQuery[некоторое длинное число, которое изменяет каждую загрузку страницы], один содержит "события", а другой - данные (например, опции и классы)., но без функций). Используя это, вы не сможете получить к нему постоянный доступ (и у него нет доступных функций).
Возможно ли иметь публичную функцию в виджете jQuery? Если так, что я делаю не так?