【问题标题】:Backbone view prototype event binding主干视图原型事件绑定
【发布时间】:2012-07-16 22:04:26
【问题描述】:

我正在创建一个 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”,所以没有必要放入“click.card”。相反,事件应该是:

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

【问题讨论】:

    标签: javascript backbone.js prototype


    【解决方案1】:

    如果有人要使用他们的插件,他们会以与扩展 Backbone.Model 相同的方式扩展您的 FlipCard.CardView

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

    这会创建一个插件视图的扩展版本,其中绑定了事件,它不会以任何方式改变插件。然后用户将照常实例化它:

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

    【讨论】:

    • 谢谢杰克。问题是 CardView 实际上是在 CardsView 中实例化的——插件会为您处理所有这些。所以如果你扩展了基本的 CardView,你也需要扩展 CardsView。这就是我只想使用 Prototype 的原因(事实证明,它有效)。
    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多