2011-12-19 4 views
2

This tutorial은 우리의 기능에서 this의 정확한 값을 얻으려면 _.bindAll을 수행해야한다고 제안합니다. 백본에서는 _.bindAll이 더 이상 필요하지 않습니다. 다음 코드는 두 번 같은 일을 기록합니다 나는 bindAll가 더 이상 필요하지, 아니면 그냥 바보 같은 실수를하고 있다고 가정하지에 수정백본은 기본적으로 _.bindAll을 수행합니까?

var TestView = Backbone.View.extend({ 
    initialize: function() { _.bindAll(this, 'func1'); }, 
    func1: function() { console.log(this); }, 
    func2: function() { console.log(this); } 
}); 
var testView = new TestView(); 

testView.func1(); 
testView.func2(); 

건가요?

+1

'testView.func1();'은 좋은 테스트 케이스가 아니며, 어떤 일이 일어나는지 살펴보기 위해 일부'events'를 사용해보십시오. [공식 문서는 여전히 'bindAll'에 대해 이야기하고 있습니다.] (http://documentcloud.github.com/backbone/#FAQ-this) 바인딩에 대한 변경 로그에는 더 이상 필요하지 않은 것이 없습니다. –

+0

당신의 예제는'_.bindAll'없이 작동 할 것이고, 당신은 이벤트 핸들러로서 함수들 중 하나를 사용해야 바인딩의 효과를 볼 수 있습니다. – Cobby

답변

5

클래스의 컨텍스트에서 메서드를 호출 할 때 여전히 필요합니다. 당신이 그것을 문맥에서 알기 때문에, 당신이 그것을 필요로하지 않은 것은 실수가 아닙니다.

_.bindAll ( http://documentcloud.github.com/underscore/#bindAll)의 밑줄 문서에서 언급 한 바와 같이

, 그것은 "그렇지 않으면 상당히 쓸모 this 호출 될 이벤트 핸들러로 사용하려고하는 기능을 바인딩에 매우 편리합니다."입니다 또한 콜백을 작성해야하는 메소드에이 메소드를 사용할 수도 있습니다.

콜백의 차이점을 보려면이 바이올린을보십시오. http://jsfiddle.net/joshvermaire/YQdZu/

관련 문제