Неправильно ли размещать приложение / бизнес-логику внутри плагинов jQuery? - PullRequest
1 голос
/ 14 апреля 2010

Уместно ли создавать jQuery-плагины, относящиеся только к одной странице? Я создавал универсальные плагины, которые не привязаны к какому-либо контексту и не содержат никакой бизнес-логики, но некоторые люди, с которыми я говорил, предлагают, чтобы почти весь javascript, включая бизнес-логику и логику, характерные для одной страницы, был внутри jQuery. плагины.

Уместно ли иметь плагин validateformXYZ, который проверяет конкретную HTML-форму?

Я покупаю в jQuery 100%, но не уверен, является ли это неправильным использованием или нет.

Ответы [ 3 ]

3 голосов
/ 14 апреля 2010

Я склонен использовать другой подход к этому. Когда у меня есть объекты (обычно формы), которым необходимо привязать к ним много клиентского поведения, я определяю объекты JavaScript, которые представляют эти формы.

Например, форма контакта может иметь соответствующий объект Contact, который инициализируется с помощью context элементов внутренней формы (текстовые поля, кнопки и т. Д.). Затем во время инициализации вы можете использовать jQuery (или ваш выбор), чтобы добавить поведение к этим элементам. В вашем случае вы бы привязали событие click, которое вызвало бы функцию проверки в вашем объекте Contact.

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

РЕДАКТИРОВАТЬ, ЧТОБЫ ПРЕДОСТАВИТЬ ПРИМЕР

Вот быстрый и простой пример этого в действии: http://jsbin.com/elefi/edit

код:

if(typeof(MyDomain) == "undefined") {
  MyDomain = {};
  MyDomain.MyApp = {};
}

MyDomain.MyApp.ContactForm = function() {
  var $_submitButton;
  var $_firstNameTextBox;

  var _validateForm = function () {
    if($_firstNameTextBox.val() === '') {
        alert('Form Invalid');
    }
    else {
        alert('Form Valid');
    }    
  };

  return {
    initialize: function(submitButtonId, firstNameTextBoxId) {
      // Add context
      $_submitButton = $("#" + submitButtonId);
      $_firstNameTextBox = $("#" + firstNameTextBoxId)

      // Add behaviours
      $_submitButton.click(_validateForm);
    }
  }  
}();

// Emit this using your server-side code
$(function() {
    MyDomain.MyApp.ContactForm.initialize('SubmitButton', 'FirstName');
});

Обратите внимание, что IE6, похоже, не нравится jsbin.com, поэтому откройте его в FF

0 голосов
/ 14 апреля 2010

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

В дополнение к манипулированию пользовательским интерфейсом и отправке / получению данных из следующего уровня приложений, из-за того, насколько разобщены веб-приложения, JavaScript должен выполнить некоторую базовую проверку. Эту проверку следует повторить на одном из других уровней, поскольку JavaScript можно отключить.

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

0 голосов
/ 14 апреля 2010

Если честно, все зависит от реализации, пока она выполняет свою работу, и ИМХО придерживается принципа DRY .

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

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