2012-05-05 5 views
0

나는 내가 다시 생각하고있는 태깅 플러그인을 가지고있다.플러그인 내부 함수에서 jquery-ui 플러그인 변수에 액세스 하시겠습니까?

저는 매번 생성되는 객체를 계속 지나가고 있습니다. 대신, 이제는 값을 전달하고 객체를 반환하는 함수가 있습니다. 플러그인에서 변수 중 하나에 액세스해야하는 경우를 제외하고는 정상적으로 작동합니다.

당신이 아래를 보면 당신은 _addTag 안에 내가 this.tag로 전화를 걸 내가 위젯을 호출하지 않습니다하여 tagArray의 요소 수 있지만 this에 내 전화를 저장할 볼 수 있습니다.

(function ($) { 
    $.widget("ui.tagit", { 

     // default options 
     options:{}, 

     //initialization function 
     _create:function() { 

      var self = this; 
      this.tagsArray = []; 
      ... 

      ... 
      this._addTag('label', 'value'); 

      } 

     }, 


     _addTag:function (label, value) { 
      ... 

      //THIS IS WHERE THE TAG OBJECT IS CREATED 
      var tag = new this.tag(label, (value === undefined ? label : value)); 
      tag.element = $('<li class="tagit-choice"' 
       + (value !== undefined ? ' tagValue="' + value + '"' : '') 
       + '>' + label + '<a class="tagit-close">x</a></li>'); 
      ... 
     }, 

     tag: function (label, value, element) { 
      var self = this; 
      return { 
       label:label, 
       value:value, 
       element:element, 
       index: self.tagsArray.length 
      } 
     } 

    }); 
})(jQuery); 

this에 대한 호출

대신입니다 :

$.widget.tag 
__proto__: Object 
constructor: function (label, value, element) { 
__proto__: Object 
+0

좋아, 내 문제를 발견했다, 그것은'new' 키워드를 사용했다. 그래서 내 다음 질문은. 'new' 키워드는 어떤 차이점이 있습니까? – Hailwood

답변

1

이 함수는 새로 생성 된 객체로 설정 컨텍스트 (this)와 함께 호출 호출하는 자바 스크립트의 new 키워드를 사용. 당신이 this을 기대하고있는 tag 함수 내 당신의 예에서

는 작업중인 위젯 객체에 설정되는 것이 아니라 그것은 때문에 new 키워드의 사용의 새로 생성 된 객체로 설정됩니다. 따라서 새로 생성 된 개체에 tagsArray 속성이 없으므로 self.tagsArray.length에서 실패합니다.

new 키워드에 대한 자세한 정보는 MDN 문서를 읽어 보시기 바랍니다. https://developer.mozilla.org/en/JavaScript/Reference/Operators/new.

관련 문제