Подтвердить что ты не робот

OO JQuery и классы

Я работаю над сайтом и использую JQuery по существу в первый раз. В основном я использовал MooTools для предыдущих проектов, и у меня есть несколько классов виджета, которые я написал, используя структуру MooTools Class. Я хотел бы передать их в JQuery, но мне кажется, что нет ничего похожего на функциональность MooTools, когда дело касается классов объектов.

Я немного искал и не нашел много на нем. У Digg появилось которое было выполнено самостоятельно, но я не уверен, что это то, что я должен использовать. Есть ли способ лучше? Как объектно-ориентированные люди обычно получают JQuery? Какой обычный метод инкапсуляции виджета пользовательского интерфейса (или любой структуры функционального класса)?

Я выведу фальшивый пример возможного класса виджетов MooTools:

var ZombatWidget = new Class({
    Extends: BaseWidget,
    widgetPropertyX = 'prop1',
    widgetPropertyY = 'prop2',
    attach = function(el) {
        var f = function() { 
            //do something widgety
        };
        el.addEvent('dblclick',f);
        el.addClass('widgetized');
    }
});

var z = new ZombatWidget();
z.attach($('widgetDiv'));

То, что у меня есть, намного больше, но у вас есть идея. Нужно ли преобразовать это в метод prototype структурирования класса/наследования? Как вы могли бы написать этот класс объектов с помощью JQuery?

4b9b3361

Ответ 2

Хм... интересно. У нас есть jQuery, который imho - отличный инструмент для взаимодействия с DOM. Это инструмент выбора, в котором вы можете написать свой собственный код (плагины), чтобы изменить выбранные элементы. Вы можете взаимодействовать здесь со своим (объектно-ориентированным) кодом в плагине, чтобы сделать что-то действительно классное.

Итак, зачем вам нужны дополнительные возможности OO в jQuery, если вы не хотите унаследовать от других плагинов jQuery?

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

$(".spiffyness").yourSpiffyficationPlugin1();

И, делая уже действительно крутую удивительность, вам нужно больше spiffyness поверх этого.

Поэтому вы хотите наследовать от своего первого плагина, который приводит к:

$(".spiffyness").yourSpiffyficationPlugin2(); //plugin inherited from 1

Но... не могли бы вы туда попасть, сделав это:

$(".spiffyness").yourSpiffyficationPlugin1().yourSpiffyficationPlugin2();

Где второй плагин просто делает эту крошечную (но удивительную;)) вещь дополнительно поверх первой?

Другими словами: это то, что вы хотите, стоит усилий ради пуризма ОО? Или механизм механизма jQuery достаточно хорош и, возможно, все, что вам нужно?

Я бы сказал, что разделение обязанностей и/или ваше мышление мышления может быть реальной проблемой здесь. Пусть jQuery делает то, на что он хорош, используйте его мощный механизм трубопровода, подключайте свои собственные плагины (которые могут содержать тонкие вещи OO)... и вы можете получить отличные результаты, пока ваш код по-прежнему чист.

Если вы думаете, что я думаю слишком просто здесь, хороший пример сущности вашей точки приветствуется!: -)

И чтобы быть впереди этого, если вы делаете что-то действительно продвинутое, и вам не удается просто сделать что-то поверх чего-то другого, вы можете подключить его к одному из ваших классов OO. Например. как:

$.fn.totalAwesomeness = function(options) {
  var defaults = {
    mode: 1,
    title: 'Awesome'
  };
  var opts = $.extend(defaults, options);
  return this.each(function() {
    var $this = $(this);
    var handler = null;
    if(defaults.mode == 1)
       handler = new com.myStuff.class1($this);
    else if(defaults.mode == 2)
   handler = new com.myStuff.class2($this); //class2 inherits from class1 
    handler.doMagic();
  });
};

Ответ 3

Вы всегда можете использовать moo4q - http://moo4q.com/. Он добавляет поддержку класса MooTools в jQuery.

Ответ 4

Я написал статью некоторое время о объектно-ориентированных плагинах jQuery, надеюсь, что это будет полезно

http://ajax911.com/jquery-object-oriented-plugins/

Ответ 5

Существуют версии сторонних javascript-классов, которые обеспечивают очень мощные возможности интроспекции. Я хотел бы особо выделить JS.Class и Joose. В то время как JS.Class моделируется после Ruby, Joose моделируется после Moose. Я не являюсь пользователем mootools, поэтому я не могу комментировать их преимущества/недостатки в отношении mootools. Но я бы обобщил их ключевые особенности.

JS.Class уделяет особое внимание симуляции объектно-ориентированных функций Ruby и делает довольно хорошую работу. Он предоставляет мощную библиотеку, смоделированную после стандартной библиотеки Ruby, а также оснащен хорошо интегрированной системой управления пакетами и тестирования.

Joose, в то время как не предоставляет никаких инструментов для управления инфраструктурой/пакетами, превосходит с точки зрения расширенные средства управления атрибутами, фильтры и лучшие средства интроспекции.

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

Ответ 6

Я только что закончил первый выпуск моего мини-проекта: https://github.com/op1ekun/plOOgins. Это все о написании кода ООП, который будет использоваться в качестве плагинов JQuery. Это не ракетная наука, а просто что-то, что мы хотели использовать на моем рабочем месте. Может быть, это поможет вам немного. Удачи!

Ответ 7

Вопрос... Почему вы уходите от MooTools, это соответствует вашим потребностям? Мне кажется, что MooTools работает нормально, и нет ничего, что jQuery не может сделать MooTools. (Противоположность неверна).

К сожалению, jQuery не создан для поддержки классического OOP, поскольку MooTools - это то, что вам нужно будет писать свои классы как плагины jQuery.

Ответ 8

Плагины иногда делают трюк.

Конечно, вы можете использовать достаточно mootools, чтобы получить модель класса/наследования. С внедрением режима совместимости document.id в 1.2.3 вы можете получить свой торт и съесть его (я думаю - не сделал это сам).