плагин javascript - объектно-ориентированный? - PullRequest
1 голос
/ 09 марта 2010

интро

Привет,

Я пытаюсь разработать некоторый плагин или / и объект в javascript, который будет контролировать некоторые свойства некоторого объекта. Он также будет использовать jQuery, чтобы облегчить разработку.

Идея

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

I will have plugin (maybe object?) with some variables and methods:

  plugin hideshow(startupconfig){
    var c, //collection
    add: function(what){
      c += what;
    },
    do: function(){
      c.show().hide().stop(); //example code
    }
  }

и я буду использовать его таким образом (или вроде ):

  var p = new Plugin();

  p
   .add($('p#simple'))
   .add($('p#simple2'))
   .do();

примечание

Я на самом деле не ищу учебники для плагинов jQuery - это больше похоже на использование одного объекта в документе в javascript, jQuery упоминается только потому, что он будет использоваться для изменения dom и упрощения селекторов, плагин jQuery может быть только для эта маленькая функция add.

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

проблемы

  1. Я действительно не знаю, с чего начать конструирование этого объекта / плагина
  2. Я не совсем уверен, как поддерживать одну переменную, которая является коллекцией объектов jQuery (что-то вроде $('#simple, #simple2');)
  3. Возможно, я бы хотел использовать jQuery с $.fn.addToPlugin для использования цепочки объектов, но это должно быть просто (на самом деле просто each( p.add($(this)); ))
  4. Моя самая большая проблема, очевидно, в том, что я не могу объяснить, чего я хочу.

Надеюсь, у меня есть смысл, идеи, ссылки или советы по достоинству.

редактировать

Это что-то вроде этого, я просто не могу понять, как это называется / используется в javascript - пример в псевдо-PHP:

class Foo() {
  $collection;
  $timer, $action;

  function onTimer(){
    foreach($collection as $e){
      $e->someAction();
    }
  }

  function add($e){
    $collection[] = $e;
  }

  function start(){
    $timer->start( onTimer() );
  }

  function->stop(){
    $timer->stop();
  }
}

var f = new Foo();

Foo.add(something);
Foo.start();

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Взгляните на Плагины / Авторские . Я скажу, что предложенный вами API на самом деле не «путь jQuery». Скорее всего, будет:

$("#simple, #simple2").hideandshow();

Отправной точкой будет:

jQuery.fn.hideandshow = function() {
  return this.each(function(){
    $(this).show().hide().stop();
  });
};

и вы в основном сделали.

Теперь вызывать эту последовательность событий тоже не имеет смысла, но это уже другая проблема.

Теперь цепочка методов становится немного более интересной, и я предполагаю, что именно здесь появляется «синглтон». Теперь в случае jQuery - по крайней мере для плагинов jQuery - состояние сохраняется в самом объекте jQuery как общее правило:

jQuery.effects = [];
jQuery.addeffect = function() {
  for (int i=0; i<arguments.length; i++) {
    if (typeof this[arguments[i]] == "function") {
      this.effects.push(arguments[i]);
    }
  }
};

и доступ к плагину:

jQuery.fn.do = function() {
  var effects = this.effects;
  return this.each(function(){
    var ob = $(this);
    for (int i=0; i<effects.length; i++) {
      ob = ob[effects[i]]();
    }
  });
};

, что позволяет:

$.addeffect("hide", "show", "stop");
$("#simple, #simple2").do();

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

2 голосов
/ 09 марта 2010

Если вы хотите написать синглтон в Javascript, шаблон модуля YAHOO должен показать вам все необходимое.

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