簡體   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