单个模型数组字段

时间:2017-12-11 15:48:02

标签: extjs extjs6

我有一个模型和商店设置,用于从服务器接收JSON数据。服务器正在发送一个Enum Set字段。我的模型将该字段作为数组接收。我有一个网格,每个可能的枚举值(只有3个值)的列作为网格中的复选框,我希望复选框显示是否在数组中设置了枚举。当用户更新复选框时,需要更新记录。

在ExtJS 6中这样做的适当方法是什么?我看过计算和转换,但这似乎只对显示数据有用,它看起来不会有助于更新记录。

Ext.define('App.Model', {
    extend: 'Ext.data.Model',
    fields: [{
            name: 'enumSet',
            type: 'auto'
        }, //[A,B,C]
    ],
});

Ext.define('App.Grid', {
    extend: 'Ext.grid.Panel',

    columnConfig: function() {
        return [{
                text: 'A',
                xtype: 'checkcolumn',
                dataIndex: 'enumSet'
            },
            {
                text: 'B',
                xtype: 'checkcolumn',
                dataIndex: 'enumSet'
            },
            {
                text: 'C',
                xtype: 'checkcolumn',
                dataIndex: 'enumSet'
            },
        ];
    },
});

1 个答案:

答案 0 :(得分:0)

您要搜索的是serialize方法,我想:

Ext.define('App.Model', {
  extend: 'Ext.data.Model',
  fields: [
      {name: 'enumSet', type: 'auto', serialize: function(v, rec) {var arr = []; if(rec.get('A')) arr.push('A'); if(rec.get('B')) arr.push('B'); if(rec.get('C')) arr.push('C'); return arr; }},
      {name: 'A', convert: function(v, rec) {if(v!==undefined) return v; return rec.get("enumSet").indexOf('A')>-1},
      {name: 'B', convert: function(v, rec) {if(v!==undefined) return v; return rec.get("enumSet").indexOf('B')>-1},
      {name: 'C', convert: function(v, rec) {if(v!==undefined) return v; return rec.get("enumSet").indexOf('C')>-1}
  ],
});