2012-07-16 173 views
0

我创建了一个Backbone.js插件,它提供给定的JSON数据的基本网格布局。我的问题是我不确定如何处理绑定事件到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({})的功能,但是这是行不通的,除非我能以某种方式告知使用扩展版视图的插件...我'宁可不做。

关于我应该在这里做什么的任何想法?

编辑︰原来这是一个愚蠢的错误。因为该视图具有'.card'类,并且我试图将点击事件绑定到'.card',所以没有必要放置'点击.card'。相反,事件应该是:

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

回答

0

如果有人使用他们的插件,他们将要扩展Backbone.Model

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

这将创建插件视图的扩展版本,以同样的方式扩展您的FlipCard.CardView事件绑定到它,并且不会以任何方式更改插件。用户然后将它实例化为正常:

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

谢谢杰克。问题是CardView实际上是在一个CardsView中实例化的 - 插件为你处理所有这些。所以如果你扩展了基本的CardView,你也需要扩展CardsView。这就是为什么我只是想使用Prototype(事实证明,它的工作原理)。 – bento 2012-07-16 22:18:02