Государственные функции из плагина jQuery

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
CHUNK = 4
[a[i*CHUNK:(i+1)*CHUNK] for i in xrange((len(a) + CHUNK - 1) / CHUNK )]
33
задан Daniel 23 June 2009 в 19:21
поделиться

4 ответа

Если вы сделаете что-то вроде следующего:

(function($){

$.fn.myPlugin = function(options) {
    // support multiple elements
    if (this.length > 1){
        this.each(function() { $(this).myPlugin(options) });
        return this;
    }

    // private variables
    var pOne = '';
    var pTwo = '';
    // ...

    // private methods
    var foo = function() {
        // do something ...
    }
    // ...

    // public methods        
    this.initialize = function() {
        // do something ...
        return this;
    };

    this.bar = function() {
        // do something ...
    };
    return this.initialize();
}
})(jQuery);

Тогда вы сможете получить доступ к любому из ваших общедоступных методов:

var myPlugin = $('#id').myPlugin();

myPlugin.bar();

Это взято из этой очень полезной статьи (май 2009) с сайта trueevil.com, который сам по себе является расширением этой статьи (октябрь 2007 г.) на сайте learningjquery.com.

91
ответ дан 27 November 2019 в 17:40
поделиться

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

;(function ($) {
    // your code
})(jQuery);

Между началом и концом модуля вы можете объявить любые функции, которые захотите. Вы не загрязните глобальное пространство имен и сможете сохранить доступ к локальным переменным с помощью замыканий, что может решить многие ваши проблемы. Также не бойтесь использовать функции $. Data .

-1
ответ дан 27 November 2019 в 17:40
поделиться

Хорошо, я понял, как это сделать:

Код плагина:

$.ajaxIcon.init = function(element, options) {
    //your initialization code

    this.start = function() {
         //start code
    }

    this.stop = function() {
         //stop code
    }
}

$.fn.ajaxIcon = function(options) {
    this.each(function () {
        //This is where the magic happens
        jQuery(this).data('ajaxIcon', new jQuery.ajaxIcon.init(this, opts));
    });

return this;
}

Затем, чтобы использовать его где-нибудь еще в вашем коде:

var myIcon = $("#myId").ajaxIcon.data('ajaxIcon') 
// myIcon: a reference to the 'init' object specific to this plugin instance
myIcon.start();
myIcon.stop();

вуаля, ответил на свой вопрос :)

3
ответ дан 27 November 2019 в 17:40
поделиться

Я думаю, вы могли бы достичь того, что искали, с помощью чего-то вроде этого:

var myIcon = $("myId").ajaxIcon(); //myIcon = a reference to the ajaxIcon 
$.ajaxIcon.start(myIcon);//some stuff
$.ajaxIcon.stop(myIcon);

Я не тестировал это - у меня нет доступа к среде, где я могу это сделать атм

0
ответ дан 27 November 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: