2016-08-24 231 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

相关问题