2012-06-20 4 views
0

jQuery UI의 버튼을 사용하는 간단한 백본보기가 있습니다.콜백에서 멤버 변수에 액세스하는 방법?

예를 들어 모델 (및보기)을 삭제해야하는 삭제 버튼이 있습니다. 은 "deleteView"메소드가 호출되는

deleteView: function(){ 
    console.log(this.model); 
} 

: 나는 다음과 같은 사용하여 렌더링 방법 뷰에있는 버튼을 추가 관리 :

var self = this; 
$(this.el).find("#deleteButton").button({text : false}); 
$(this.el).find("#deleteButton").bind("click", self.deleteView); 

을하고 내가보기에 대응하는 방법을 "this"는 뷰가 아니라 버튼을 참조하기 때문에 "undefined"가 콘솔에 출력됩니다. "this"를 "self"로 바꾸어도 작동하지 않습니다. 또한 모델 또는 뷰를 인수로 메서드에 전달하는 것은 인수가 click 이벤트가되므로 작동하지 않는 것 같습니다.

백본에서 이러한 콜백을 처리하는 올바른 방법은 무엇입니까?

답변

1

대신 backbone.view 이벤트 속성을 사용할 것입니다. 이는 렌더링하는 동안 jQuery를 사용하여 이벤트를 자식 요소에 수동으로 바인딩하는 대신 제안 된 방법입니다. http://documentcloud.github.com/backbone/#View-delegateEvents

가보기에이를 추가하는 것처럼 간단 할 것이다 :이 너무 알고 좋은

events: { 
    "click #deleteButton": "deleteView", 

    }, 
+0

아, 물론, 나는 이것을위한 "중추적 인 방법"이 있다는 것을 알았습니다! – wannabeartist

1

함수의 컨텍스트가 jQuery 이벤트로 바인드되면 변경됩니다.

self 또는 jQuery.proxy을 사용하는 다른 함수를 사용하십시오.
$.proxy을 통해 컨텍스트를 유지의 예 : http://jsfiddle.net/bAeQZ/

var self = { 
    deleteView: function(){console.log(this.model)}, 
    model: '...some model...' 
}; 
$(document).click($.proxy(self.deleteView, self));​ 
// Alternative without $.proxy: 
$(document).click(function(){self.deleteView();});​ 
+0

감사! – wannabeartist

관련 문제