2011-08-22 5 views
2

jQuery 객체가 있고 그 객체에 이벤트를 할당하기 위해 .bind() 메서드를 사용하고 있습니다. 그러나 나는 또한과 같이뿐만 아니라 바인드 방법으로 개체 자체에 대한 참조를 전달 해요 :사용중인 바로 객체에 대한 참조를 전달하면 순환 참조가 발생합니다.

$(document).ready(function() 
{ 
    // Grab the jQuery version of the DOM element. 
    var $formField1 = $("#form-field-1"); 
    // I should probably store this stuff in $formField1.data(), 
    // but not until I find out if this can cause a circular reference. 
    var formFields = { 
     "jQ": $formField1, 
     "$comment": $("#form-field-1-comment"), 
     "commentAnswers": [ 2, 4 ] 
    }; 
    // Set up the comment to show when a certain answer is given. 
    this.jQ.bind("change", formFields, toggleComment); 
}); 

function toggleComment(p_event) 
{ 
    // Show/hide comments based on the answer in the commentAnswers array. 
    if ($.inArray($(this).val(), question.commentAnswers) > -1) 
    { 
     question.$comment.parent().slideDown(); 
    } 
    else 
    { 
     question.$comment.parent().slideUp(); 
    } 
} 

나는이 "사실"순환 참조가 발생할 수 있는지 알고 싶어?

+0

'this.jQ'란 무엇입니까? 'formFields.jQ'라는 뜻이 아닌가요? 어떤 경우에는'$ formField1'을 사용하십시오. –

+0

원래 코드에는 양식의 모든 양식 필드에서 $ .each 루프가 수행됩니다. 관련성이없는 코드를 제외하고 싶었고이 코드를 $ formField1로 변경하지 못했습니다. – b01

답변

1

순환 참조가 아니지만 중복됩니다. 이벤트를 트리거하는 개체는 이벤트 처리기 내에서 this을 통해 사용할 수 있습니다. 전달할 필요는 없습니다.

그러나 설정 한 bind에 전달 된 데이터가 정적 인 것을 인식하는 것이 중요합니다. 반면, 이벤트 핸들러 내의 this은 항상 이벤트를 트리거 한 특정 오브젝트를 저장합니다. 이 두 객체는 ​​동일하거나 다를 수 있습니다. bind의 적용 범위에 따라 다릅니다.

+0

오늘 아침에 그것이 중복되었다는 것을 알아 냈습니다. 단지 commentAnswers와 $ comment를 .data() 메소드를 사용하여 객체 자체에 첨부 했으므로이 모든 질문은 피할 수있었습니다. 그래도 대답은 중요합니다. 그리고 감사합니다! – b01

+0

나는 그것이 순환 참조 일 수 있다는 생각으로부터 거의 불안감을 가지고 있었다. – b01

관련 문제