Как передать объект JS в функцию jQuery .queue () - PullRequest
0 голосов
/ 01 февраля 2012

Я использую ООП и jQuery в своих разработках. Раньше я передавал свой текущий объект this в функции jQuery следующим образом:

$(myElement).live('click', this, function(el){
  // I can access to my JS object using el.data
});

Но я не могу найти, как сделать то же самое с функцией jQuery .queue(). Возможно ли это?

EDIT

Я даю вам контекст, в котором я хочу использовать .queue():

CAPTIVEA.widget.Message = {
    /**
     * Displays generated message on the screen
     * @method display
     * @public
     */
    display: function() {
        // Display Message
        $('.message')[this.effects.show](this.effects.duration, function(){
            $(this).show();
            $('.message span').show();
            $('.message').children().show();
        });

        if (this.autoHide)
        {   // Remove message after delay
            $('.message').data('objMessage', this);
            $('.message').delay(3000).queue(function(el){
                $(this).data('objMessage').close();
            });
        }
    },

    /**
     * Removes generated message from the screen
     * @method close
     * @public
     */
    close: function() {
        $('.message')[this.effects.hide](this.effects.duration, function(){
            $(this).remove();
        });
    }
};

Ответы [ 4 ]

2 голосов
/ 01 февраля 2012

«Возможно ли это?»

Нет.Метод live() является методом обработки событий, и вы устанавливаете данные объекта события.Первый аргумент в обратном вызове - это объект событие .

Я не знаю, что представлял this, но у меня такое ощущение, что вы неправильно использовали данные события.

Метод queue() не имеет ничего общего с обработкой событий.Вы передаете ему функцию, которая добавляется в очередь.Его первый параметр будет ссылаться на функцию, которая освобождает очередь.

1 голос
/ 01 февраля 2012

вы сначала сохраняете экземпляр как данные элемента и используете его в функции очереди jquery;

$("#el").data("instance", this);

ru после этого используйте в функции

$("#el").queue(function(){
    var instance = $(this).data("instance");
    //do whatever you want
});
1 голос
/ 01 февраля 2012

Вы все еще можете получить доступ к текущему объекту. Смотрите мой jsfiddle здесь: http://jsfiddle.net/9upJB/

Кроме того, то, на что указали другие, верно. live() (который вы должны ОСТАНОВИТЬ, используя btw) - это событие. queue() - это метод, не имеющий отношения к событию.

При доступе к объекту это выполняется как обратный вызов (см. Документацию jQuery).

0 голосов
/ 01 февраля 2012

Вы не передаете функцию queue() элементу, вместо этого функция выполняется для соответствующего элемента.

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