Мой первый плагин jQuery, куда идут функции и глобальные переменные? - PullRequest
7 голосов
/ 14 апреля 2011

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

  1. Где я могу разместить общую функцию?Возьмите привет () например.Скажем, я планирую использовать эту функцию в плагине, где он должен жить?Прямо сейчас я поставил его сверху, что, кажется, работает, но я не уверен, что это правильно.

  2. Где я могу разместить глобальную переменную?Возьмите мою переменную "imgs" массив для примера.Должен ли я объявить это там, где он у меня есть сейчас или в моем методе init, или где-то еще?

    (function($){
    
    function hello(){
        alert("hello world");
    }
    var imgs = new Array(); 
    
    var methods = {
        init: function(options){
            if(options){
                $.extend({
                    width: 200,
                    height: 200,                        
                    selectedColor: '#123456'
                }, options);    
    
                // for every image do something
                this.find('img').each(function(){   
                    var $this = $(this);
    
                    var width = $this.width();
                    var height = $this.height();
    
                    console.log("width: " + width + " height: " + height);
    
                    selection = function() {
                        console.log($this.attr('src'));                         
                        hello();                
                    };
    
                    $this.bind('click', selection);                     
                });                 
            }               
            return this;        
        },
        test : function( string ) {
            console.log("Test: " + string);                 
            //return "here";
        }
    };
    
    
    $.fn.Thumbnails = function(method) {      
        // Method calling logic
        if ( methods[method] ) {
          return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
          return methods.init.apply( this, arguments );
        } else {
          $.error( 'Method ' +  method + ' does not exist on jQuery.Thumbnails' );
        }             
    
    };
    
    })(jQuery);
    
    $thumbnails = $('#imagescontainer').Thumbnails({
            height: 150,
    });
    

Спасибо за помощь!

1 Ответ

8 голосов
/ 14 апреля 2011
  1. Поместите их вне вашей функции jQuery, но внутри самой исполняемой функции.Это гарантирует, что они существуют только для вашей функции jQuery.Например, вы можете видеть, что утилита findText() находится вне функции jQuery в моем плагине bumpyText .

  2. Это зависит отего требуемый срок службы.Если вам это нужно для каждого вызова вашей функции, поместите его в свою функцию.Если он должен сохранять свое состояние при вызове плагина (маловероятно), поместите его за пределы функции jQuery.

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