2011-09-25 6 views
2

전화를 걸 때 약간의 도우미를 표시하는 플러그인을 작성하고 있습니다. 이 같은

$(el).santasLittleHelper([options]) 

이 플러그인은 다음 바로 JQuery와 UI 같은 일부 "이벤트"가 있고 그들은 트리거해야합니다 : 다음과 같이 시작해야하는데

$(el).santasLittleHelper('evetnName', [options]) 

내가 작업 프로토 타입을 가지고 있지만 내 구조에 대한 미래의 문제에 대해 몇 가지 우려가 있습니다. 메모리를 가득 채우거나 변수 및 기능 범위에 대한 다른 문제가 있으면 계속해서 작업합니다. 다음은 개요입니다.

(function($) { 

$.fn.santasLittleHelper = function(p1, p2) { 

    return this.each(function() { 
     var o = { 
      showSpeed: 50, 
      hideSpeed: 50, 
      duration: 5000, 
      delay: 0 
     } 
     var el = $(this); 
     function init() { 
      console.log('init 1'); 
     } 
     var events = { 
      show: function(opt) {}, 
      hide: function(opt) {}, 
      pulse: function(opt) {} 
     } 
     if(p1 == undefined) {//This is obviously the init call 
      init(); 
     } 
     if(typeof(p1) == 'object') { 
      //Correctly added parameters would then mean that p1 is options 
      //and is the only parameter added so we store the options and init 
      $.extend(o, p1); 
      init(); 
     } 
     if(typeof(p1) == 'string') { 
      //This is a call to an "event". 
      //call the "event" function and supply possible options as arg 
      events[p1](p2); 
     }    
}); 
} 

})(jQuery); 

옵션은 각 이벤트 호출마다 제공 될 수 있지만이 경우 해당 이벤트 기능 범위에서만 사용할 수 있어야합니다. 이것은 헬퍼가 init 호출에서 옵션을 제공함으로써 내가 만든 정신 상자에서 무엇인가를하기를 원하기 때문입니다.

코드 시작 부분에 선언 된 변수 때문에 $ (el) .santasLittleHelper ('event')를 호출 할 때마다이 접근 방식이 약간 메모리를 채 웁니까?

깨끗하고 이해할 만해 보이지만 개선 할 수 있다고 생각하십니까?

+0

'var init = function init() {...}'과 같은 코드에주의하십시오. 이상한 브라우저 버그로 인해'function init() {...} '을 사용하는 것이 더 안전합니다. (어쨌든 거의 똑같습니다.) – Pointy

+0

참. 나는 그 지위를 편집했다. 이 함수는 내가 맞다면 여전히 플러그인 범위에있다? – Anders

+0

예,'var'을 사용하여 선언 한 것과 거의 동일한 효과가 있습니다. 사실 나는 그것이 문제를 일으킨다면 아마도 다른 것이 잘못되었다는 것을 의미한다고 말할 수 있습니다 :-) 당신의 경우에 그것은 나에게 잘 들립니다. – Pointy

답변

0

사례에 따르면 here에 따르면, 당신이 제대로하고있는 것처럼 보입니다. 가능한 경우 o 및 이벤트를 각각 독립적으로 만들려고합니다 (이전에 선언하고 대체가 필요하면 선택적 매개 변수로 전달합니다). 각각의 외부에서 유일하게 선언 된 것을 사용 하시겠습니까?)

+0

좋은 지적! 나는 그것을 고려할 것이다. 이벤트를 호출하는 대신 다음과 같이 보았을 때 올바른지 이해하고 있습니까? events [p1] (o, p2)이고 함수 서명이 함수 (defOptions, tempOptions)입니까? – Anders

+0

예, tempOptions == null인지 확인한 다음 tempOptions를 "defaults"로 바꾸고 기본값은 참조로 사용되므로 메모리가 넘치지 않습니다 –