Насколько злой jQuery * внутри * кода MooTools? - PullRequest
5 голосов
/ 13 августа 2010

Я живу и дышу jQuery, но мне также нравится находить отличный плагин, который отлично справляется со своей задачей.

Мое приложение Rails написано в jQuery, но для загрузки файлов я пока не нашелчто-нибудь лучше FancyUpload (лучше ИМХО, чем Uploadify или SWFUpload ).Перепробовав все три библиотеки, FancyUpload, безусловно, лучше всего интегрируется в мое приложение.

Однако FancyUpload основан на MooTools, и загрузка обеих библиотек (не говоря уже о работе с ними) начинает немного усложняться.головная боль.Во-первых, я загружаю MooTools только на те страницы, которые используют функцию загрузки;все остальные страницы используют исключительно jQuery.Во-вторых, мне пришлось вручную именовать многие из моих функций jQuery , что немного раздражает.

Но, пожалуй, самая громоздкая особенность этой настройки заключается в том, что я не знаю MooTools.Поскольку я смог сделать почти все остальное с помощью jQuery, я никогда не удосужился учиться.Теперь, когда я заставляю себя использовать эту библиотеку FancyUpload (которую я люблю и хочу продолжать использовать), я столкнулся с моей неумелостью в MooTools.

В частности, вот моя onFileSuccess функция для FancyUpload:

onFileSuccess: function(file, response) {
    var json = new Hash(JSON.decode(response, true) || {});

    if (json.get('status') == '1') {

      // success
        file.element.addClass('file-success');
        (function ($, elem, queue_item) {
          $('#images').append($(elem).hide().fadeIn('slow'));
          $(queue_item).fadeOut('slow', function () { $(this).remove(); });
        })(jQuery, json.get('data'), file.element);

    } else {

      // failure
        file.element.addClass('file-failed');

    }
}

Как вы заметили, у меня есть функция jQuery прямо в середине функции MooTools.

Мой вопрос таков: действительно ли это плохо?Моя функция работает так, как я этого хочу, но я не знаю, буду ли я делать снежный ком к будущему бедствию, делая это.

Если это действительно плохая идея, может кто-нибудь дать мне указатель каккаким будет код, эквивалентный MooTools?

Буду признателен за любую информацию или помощь.

Ответы [ 2 ]

4 голосов
/ 25 августа 2010

Я думаю, что использование зарезервированного символа '$' для jq и mootools никогда не будет хорошим решением, учитывая, что этого можно легко избежать, если правильно использовать пространство имен.Я предполагаю, что вы используете пространство имен, используя что-то вроде:

jQuery.noConflict();

Когда более удачный способ - просто присвоить его переменной:

var jQ = jQuery.noConflict();

Теперь вы можете вызвать jQ ('здесь селектор ') для jq и $ для mootools.Помогает мне сохранить мой код прямо и делает его более читабельным.Вы также можете просто изменить порядок включений, которые также могут решить проблему с пространством имен.

0 голосов
/ 13 августа 2010

Обычно это не проблема, но я бы порекомендовал не смешивать специфический для фреймворка код с какой-либо функциональностью, если только используемая вами фреймворк не обеспечивает необходимые вам функции.Таким образом, вы сохраняете переносимость, и у вас есть только одно требование вместо того, чтобы требовать 2 конкретные версии 2 разных библиотек.

ваш код должен выглядеть примерно так:

onFileSuccess: function(file, response) {
    var json = new Hash(JSON.decode(response, true) || {});

    if (json.get('status') == '1') {
      // success
        file.element.addClass('file-success');
        document.id('images').adopt(document.id(json.get('data')).fade('hide').fade('in'));
        document.id(file.element).set('tween', {
          onComplete: function() { this.element.dispose();}
        }).fade('out');
    } else {
      // failure
        file.element.addClass('file-failed');
    }
}

edit: только что заметилДимитар сделал несколько похожий ответ.Мое решение работает точно так же, но правильно избегает использования функции $, которая особенно необходима при смешивании фреймворков.

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