Если я создаю виджет JQuery (пример кода ниже) и затем определяю "общедоступный" метод, есть ли какой-либо другой способ назвать метод кроме использования следующей формы?
$("#list").list("publicMethod");
Я хотел бы создать серию виджетов, что все определяют те же методы (в основном реализующий тот же интерфейс), и смочь назвать метод, не зная ничего, о котором виджете я в настоящее время вызываю метод на. В текущей форме я должен знать, что выполняю метод на виджете "списка".
Ниже пример создания виджета с "общедоступным" методом.
(function($) {
var items = [];
var itemFocusIdx = 0;
$.widget("ui.list", {
// Standard stuff
options : { ... },
_create : function() { ... },
destroy : function() { ... },
// My Public Methods
publicMethod : function() { ... }
...
});
}(jQuery));
Виджеты jQuery UI используют метод jQuery $ .data (...) для косвенного связывания класса виджета с элементом DOM. Предпочтительный способ вызова метода в виджете - это именно то, что было описано Максом ...
$('#list').list('publicMethod');
... но если вы хотите указать возвращаемое значение, вам повезет, вызвав его таким образом, через данные method:
$('#list').data('list').publicMethod();
Однако использование второго способа обходит весь шаблон виджета пользовательского интерфейса jQuery, и его, вероятно, следует избегать, если это возможно.
Как насчет этого:
$("#list").list.publicMethod
Поскольку вы расширяете ui.list с помощью набора пары ключ: значение
Попробуйте следующее:
$("#list").list("publicMethod");
Немного не по теме, я знаю, но вы можете захотеть посмотреть на jquery Entwine.
Это обеспечивает форму наследования и полиморфизма, которая позволяет некоторые умные действия с простым кодом. Похоже, что это позволит сделать то, что вы пытаетесь сделать.