2011-10-17 2 views
2

jQuery 플러그인의 로컬 변수에 관한 질문이 있습니다. 주요 jQuery 함수 레지스터 외부에서 선언하면 플러그 인이 호출 될 때마다 변수를 재정의하는 것이 좋습니다.jQuery 플러그인 작성 - 다중 인스턴스화

예 :

(function($){ 
    jQuery.fn.test = function(options){ 
     if (options) { 
      $.extend(settings, options); 
      } 
     this.each(function(i,item){ 
      // do whatever i am going to do 
     }); 

    }; 


    var settings = { 
     value1: "hello", 
     value2: "word" 
    }; 
})(jQuery); 

가 가장 최근에 선언 된 설정으로 설정을 무시할 것, $(object).test({value1:'newterm'});은 .. 여러 번 호출 내가 그 메소드가 호출 될 때마다 생각에서 수정임을 말해?

내 플러그인의 인스턴스가 여러 개일 경우 기본 jQuery.fn.test = function(){//here} 메소드의 범위 내에서 모든 것을 선언해야합니까?

답변

6

$.extend은 jQuery 초기화 함수가 글로벌 개체 jQuery에서 .test을 설정할 때 클로저 범위에있는 settings을 수정하므로 올바른 것입니다. 클로저 범위는 여러분이 실행할 때마다 동일합니다. .test; 따라서 모든 개체는 변경 내용을 유지합니다.

+0

체격을, 나는 모든 관련 기능을 이동하고 jQuery.fn = 함수에 바르 모두 좋다 , 그냥 확인하고 싶었어, – Atticus

+0

예, 가끔 자바 스크립트에서 머리에 똑바로 유지하는 것이 어렵다;) Btw, 당신이 대답을 좋아한다면, 그것을 받아 들일 수 있을까? :) – Ryan

+0

물론! 핀란드어로 5 분 타이머를 기다려야했습니다. 그래, 나는 많은 플러그인들이 초기화와 함수를 초기화하는 함수 밖에서 그들의 메소드와 데이터를 유지하는 것을 보았 기 때문에 확신 할 수 없었다. 그래서 main (function() ... wrapper는 각 초기화를 위해 호출되었다.) 분명히 jQuer lib로 플러그인을 등록하는 데 한 번만 사용되었다. – Atticus

3

개체를 $ .extend에 전달하는 순서에 따라 다릅니다. 전달 된 첫 번째 (대상) 객체가 수정됩니다.이 경우 설정 개체가 수정됩니다.

$.extend(options, settings); 

또는 새로운 개체를 얻을 : 당신은 기본적으로 유지하려면

var newoptions = $.extend({}, options, settings);