2012-07-16 4 views
0

제공된 JSON 데이터의 기본 그리드 레이아웃을 제공하는 Backbone.js 플러그인을 만들고 있습니다. 내 문제는 플러그인 자체를 변경하지 않고 View 클래스에 이벤트 바인딩을 처리하는 방법을 잘 모르겠다는 것이다. 그리고 나는 이것을하지 않을 것입니다. 플러그인 사용자가보기를 확장하거나 프로토 타입을 변경하여 사용자 정의 이벤트를 바인드 할 수있게하는 것이 좋습니다.백본보기 프로토 타입 이벤트 바인딩

플러그인의보기는 이벤트가 바인드되지 않은 기본보기입니다. 여기에는 단순화를 위해 생략 한 다른 기능도 포함되어 있습니다.

FlipCard.CardView = Backbone.View.extend({ 

    tagName: 'div', 

    className: 'card', 

// and more 

}); 

나는 이벤트를 바인딩 내 별도의 app.js 파일에 프로토 타입 속성을 사용하려고했지만, 그들은 트리거하지 않는 것.

FlipCard.CardView.prototype.events = { 
    'click .card' : 'alert' 
}; 

FlipCard.CardView.prototype.alert = function(){ 
    alert("hello!"); 
}; 

그리고 나는 .extend ({}) 함수를 알고 있어요,하지만 난 어떻게 든 ... 뷰의 버전을 확장 사용하는 플러그인을 통보하지 않는 한 문제가 해결되지 것이다 I 오히려하지 않습니다.

여기에 내가해야 할 일에 대한 아이디어가 있습니까?

편집 : 바보 같은 오류가 발생했습니다. 보기에 '.card'클래스가 있고 click 이벤트를 '.card'에 바인딩하려고 했으므로 '.card'를 클릭 할 필요가 없습니다. 대신 이벤트가 있어야한다 : 누군가가 자신의 플러그인을 사용한다면, 그들은 당신이 당신의 플러그인보기의 확장 버전을 생성 Backbone.Model

myApp.Views.myCardView = FlipCard.CardView.extend({ 
    events: { 
     'click .card' : 'alert' 
    }, 
    alert: function() { 
     alert("hello!"); 
    } 
} 

을 확장하는 것과 동일한 방법으로 FlipCard.CardView을 연장 할

FlipCard.CardView.prototype.events = { 
    'click' : 'alert' 
}; 

답변

0

이벤트가 묶여 있으며 어떤 식 으로든 플러그인을 변경하지는 않습니다. 그런 다음 사용자는 정상적으로 인스턴스화합니다.

var someView = new myApp.Views.myCardView(); 
+0

감사합니다. 문제는 CardView가 실제로 CardView 내에서 인스턴스화된다는 것입니다. 플러그인이이 모든 것을 처리합니다. 따라서 기본 CardView를 확장하면 CardsView도 확장해야합니다. 그래서 Prototype을 사용하고 싶었습니다. – bento