Как сделать JS-библиотеку независимой оберткой селектора - PullRequest
1 голос
/ 04 октября 2010

Каков наилучший способ создания независимой от библиотеки оболочки для селекторов библиотеки JS? У меня есть пользовательский JS-фреймворк, который стремится быть максимально независимым от библиотек. Проблема, с которой я столкнулся, заключается в том, что, например, Mootools расширяет возвращаемый элемент DOM с помощью своих собственных специфических методов (инъекция, принятие и т. Д.), И я не хочу, чтобы они были видны модулям, расположенным поверх структуры (как Николас Закас однажды описал), чтобы предотвратить злоупотребления / несчастные случаи.

В качестве простой первой помощи я создал пользовательский селектор, использующий Mootools, затем он создает собственный элемент -object / wrapper и руками выбирает (и улучшает) элемент Doo Mootools, поэтому расширенные методы Mootools не видны непосредственно модули выше. Проблема этого подхода заключается в том, что я теряю всю встроенную функциональность элемента DOM (значение, стиль и т. Д.), Если он не был специально закодирован в оболочку (элемент).

Есть ли другой и / или лучший способ сделать это? Что-то, что расширило бы собственный элемент DOM, таким образом предоставляя собственные свойства / методы автоматически И предлагая расширенные функциональные возможности через оболочку (через Mootools, jQuery, что угодно ...).

Пример кода, как это делается в данный момент:

/*
 * Wrap the native library element
 */
Element = function(_libElement) {
    // Store native object
    var libElement = _libElement;

    return {
        addClass: function(_class) { libElement.addClass(_class); return this; },
        removeClass: function(_class) { libElement.removeClass(_class); return this; },
        hasClass: function(_class) { return libElement.hasClass(_class); }
    };
};

/*
 * Custom selector
 */
getElement = function(_query) {
    var elements = $$(_query);

    // Wrap each element to Element wrapper
    var num = elements.length;
    while(num--) {
        elements[num] = new Element(elements[num]);
    }

    return elements;
};

1 Ответ

1 голос
/ 04 октября 2010

Мой подход заключается в том, чтобы не беспокоиться об этом, просто передать обратно элемент DOM. Если кто-то хочет положиться на усовершенствования MooTools (или Prototype) для этого элемента DOM, это его собственный взгляд. На самом деле, если вы попытаетесь предотвратить эти улучшения, я бы сказал, что вы больше не являетесь независимым от библиотек & mdash; вместо этого вы ведете активную дискриминацию (из-за отсутствия лучшего слова!) по отношению к библиотекам, которые улучшают нативные элементы. :-) Кто-то, кто использует эти библиотеки, по-видимому, хочет этих улучшений.

Если кто-то строит модули поверх вашей библиотеки, он должен знать о среде, в которой он строит (что не гарантирует наличия этих улучшений).

Несколько не по теме, но, вероятно, стоит отметить, что расширение элементов DOM напрямую выходит из моды. Я знаю, что парни из Prototype активно планируют использовать обертки (a'la jQuery) вместо этого в нужный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...