繁体   English   中英

骨干组件可重用性

[英]Backbone component reusability

我正在努力找到使Backbone视图可重用的最佳选择。 我g目结舌,发现了许多不同的解决方案,但不确定哪一个符合我的要求。 基本上我会有许多小部件充满实时数据,我需要一个基本组件来处理服务订阅

是针对此问题的最佳解决方案:

App.View.Base = Backbone.View.extend({
  baseMethod: function( params ) {};
});

App.ExtendedView.Base = App.View.Base.extend({
  // new stuff here

  // overriding App.View.Base.baseMethod
  baseMethod: function( params ) {
    // overriding stuff here 
    App.View.Base.prototype.baseMethod.call(this, params); // calling super.baseMethod()
  }
});

有没有更好的方法? 或者我应该使用mixins?

骨干视图

我可能倾向于支持组合而不是继承,并创建一个微调器视图,并在需要微调器功能的其他视图中使用它的实例。

更多信息: 首选组合而不是继承?

我用于这样的东西的典型经验法则是,如果基类中有任何不可变的方法为所有子类提供公共上下文,那么继承是有意义的。 例如,我为我的Backbone应用程序创建了一个类似于下面的BaseView类:

define(function() {
    return Backbone.View.extend({
        /**
         * show() and hide() are immutable
         */
        show : function() {
            this.beforeShow();
            this.doShow();
            this.afterShow();
        },
        hide : function() {
            this.beforeHide();
            this.doHide();
            this.afterHide();
        },
        doShow : function() {
            this.$el.show();
            this.trigger('displayComplete', {action : 'show'});
        },
        doHide : function() {
            this.$el.hide();
        },
        //Override the following to extend behavior of the view
        //before and/or after the view is shown/hidden.            
        beforeShow : function() {},
        beforeHide : function() {},
        afterShow : function() {},
        afterHide : function() {}
    });
});

这是一个非常简单的例子,但事实证明它可以使我的应用程序开发变得更加容易,因为我的中央控制器对象被赋予了一个用于显示和隐藏视图的通用界面。 我想你也可以在这里使用组合,但这需要在运行时进行显式的extend()。 在任何一种情况下都会得到相同的结果,但我更喜欢在实例化视图时使用这些功能。

另一个想法是,它真的取决于你想要完成的事情。 继承比组合更加严格,但同样,它取决于你最终想要完成的事情,有时强化刚性来维护上下文是一件好事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM