2016-08-24 34 views
3

我有幾個共享公共列的網格(問題不限於列,任何配置對象)。目前我正在做這樣的事情:什麼是一些重用配置部分的好方法?

//columns.js 
var columns = {"reusable1": {...}, "reusable2": {...}}; 

//grid views 
Ext.define('MyApp.view.Grid', { 
    columns: [ 
     {text:'inline column1'}, 
     columns.reusable1, 
     columns.reusable2, 
     {text:'inline column2'}, 
    ] 
}); 

這幹得不錯,但是這將是更好的方法以類似的方式工作(而無需在每個配置一塊創造獨特xtype,或修改CONFIGS constructorinitComponent)。我只是想能夠像以前一樣將misc可重用配置片段內聯。

回答

1

我認爲大多數其他選項可能會降低可讀性或者看起來極端複雜 - 但是您可以覆蓋基類,幷包含名爲「」列的的配置。

我假設你說的是,「不修改配置在構造函數中」你指的是網格實現的列而不是類似的邏輯,可以在其他地方整理。

Ext.define('App.override.grid.column.Column', { 
    override: 'Ext.grid.column.Column', 

    config: { 
     name: null  
    }, 

    statics: { 
     namedColumns: { 
      reusable1: { /* ... */ }, 
      reusable2: { /* ... */ }, 
      // ... 
     } 
    }, 

    constructor: function(args){ 
     var _args = args || {}, 
      statics = Ext.grid.column.Column, 
      defaults = statics.namedColumns[_args.name] || {}; 
     this.callParent([Ext.apply({}, _args, defaults)]); 
    } 
}); 

使用

Ext.define('App.view.Grid', { 
    columns: [ 
     { text: 'inline column1' }, 
     { name: 'reusable1'  }, 
     { name: 'reusable2'  }, 
     { text: 'inline column2' }, 
    ] 
}); 

優勢

  • 收拾好項目結構中,而不是現有的在全球範圍內。
  • 避免潛在的依賴性問題,因爲Sencha CMD將確保在聲明任何網格之前覆蓋(並擴展這些默認值)。
  • 命名的配置更加靈活,可能整齊地被內聯覆蓋。
    例如{ name: 'reusable', flex: 2 /* superseding value */ }

缺點

  • xtype不能用作默認配置的一部分,這仍然需要被指定爲內聯比常規網格列的任何其他。
    例如{ xtype: 'datecolumn', name: 'some-defaults' }

» Fiddle

相關問題