Как создать плагин jQuery с первой инициализацией? - PullRequest
1 голос
/ 19 марта 2012

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

В идеале я хочу, чтобы он работал так:

  1. При первом вызове set запустите функцию init () и установите все лоты var, которые мне нужны во всем плагине (поэтому я не могу определить их внутри init (), так как онибудет недоступен в остальной части плагина.)1011 *
      $.fn.search = function() {  
    
        if( !inited ) {
        /*
            Define everything that should only be defined the first time
        */
        }
    
        /*
            All methods for my plugin, including an init() method
        */
    
        if( !inited ) {
            init();
            var inited = true;
        } 
    
     };
    

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

    $.fn.search.config = {
        inited = false,
        output,
        search,
        singleElems,
        templates,
        included,
        scoreBoard,
        container,
        singles
    }
    

    И определять их в init (), но разве это лучший способ хранить вещи для вашего плагина?

Ответы [ 2 ]

4 голосов
/ 19 марта 2012

Используйте data, так большинство плагинов делают для сохранения состояния и предотвращения повторной инициализации:

$.fn.search = function() {
    return this.each(function() { // For each selected element
        var data = $(this).data("search");
        if ( !data ) {
            var state = {};
            // Your plugin logic
            $(this).data("search",state);
        }
    });
};
2 голосов
/ 19 марта 2012

Вы можете использовать .data('myPluginData',{a:b,c:d}) ( документы ) для хранения всех необходимых настроек в одном объекте пространства имен, который прикреплен к элементу, к которому применяется плагин. См. http://docs.jquery.com/Plugins/Authoring#Data для части данных и http://docs.jquery.com/Plugins/Authoring#Plugin_Methods для логики вызова метода.

Таким образом, вы можете легко отслеживать используемые настройки и использовать такие вещи, как if ($(this).data('myPluginData')), чтобы узнать, был ли плагин уже вызван для какого-либо объекта, и просто использовать sth, как $(this).data('myPluginData').settingA, чтобы получить доступ к сохраненной настройке.

...