Расширение виджетов jQueryUI без конфликтов - PullRequest
2 голосов
/ 08 октября 2011

Я заинтересован в расширении поведения диалогового виджета jqueryUI. В прошлом я переопределял такие функции:

//Custom dragging
$.ui.dialog.prototype._makeDraggable = function () {}

Но я думаю, что мне следует перейти на использование фабрики виджетов для создания нового виджета, который наследуется от диалога.

Я считаю, что код должен выглядеть следующим образом:

(function($, undefined) {
  $.widget('cs.dialog', $.ui.dialog, {
    // definition of the widget goes here
  });
}(jQuery));

У меня вопрос: не вызовет ли это конфликт, даже если мой диалоговый виджет находится в пространстве имен cs, а jquery - в пространстве имен пользовательского интерфейса? Я считаю, что jquery присоединяет метод виджета к $ .fn, так что я думаю, что так и будет.

Если это так, какова цель пространства имен, если у вас все еще возникают конфликты? Нужно ли называть мой виджет "cs.csDialog", чтобы он был уникальным? Я чувствую, что в моем понимании чего-то не хватает.

Спасибо за любую помощь или разъяснение.

1 Ответ

2 голосов
/ 08 октября 2011

$.widget() вызывает $.widget.bridge() внутренне для добавления метода виджета к объекту $:

$.widget.bridge(name, $[namespace][name]);

Как видите, он передает только имя виджета и функцию создания.Пространство имен используется только для доступа к функции создания и не является частью имени метода.

Таким образом, в вашем случае вызов вашего виджета dialog действительно заменит $.dialog().Однако оригинальный метод $.dialog() останется доступным как $.ui.dialog(), и таким же образом ваш всегда будет доступен как $.cs.dialog().

...