ExtJS表单处理数组字段

时间:2013-09-16 21:24:50

标签: arrays forms extjs

我有一个包含int数组的模型。我想显示一个可以编辑这个int数组的表单。

// Form definition
var form = Ext.create('Ext.form.Panel', {
    items: [
    /* .. */
    ]
});

form.loadRecord(record);

record.statesint的数组,例如:[2, 7]

对于表单,我尝试了两种方法,但没有一种方法可以按预期工作。

第一路

var form = Ext.create('Ext.form.Panel', {
    items: [{
       xtype: 'combo',
       fieldLabel: 'States',
       name: 'states',
       multiSelect: true,
       store: [[1, 'Alabama'], [2, 'California'], [3, 'New York'], [7, 'Georgia']]
    }]
});

问题是:

  • 当我提交表单时,所选数据的名称为states,我希望states[]适合我的php后端
  • loadRecord不起作用,只显示2, 7并且未预先选择组合中的项目(此处为加利福尼亚州和佐治亚州)

第二路

var form = Ext.create('Ext.form.Panel', {
    items: [{
       xtype: 'combo',
       fieldLabel: 'States',
       name: 'states[]',
       multiSelect: true,
       store: [[1, 'Alabama'], [2, 'California'], [3, 'New York'], [7, 'Georgia']]
    }]
});

问题是:

  • loadRecord没有做任何事情,组合保持空白。

我确信这是一些我不知道的常见行为,有人可以指出我正确的方向吗?非常感谢你。

1 个答案:

答案 0 :(得分:0)

我终于想出了如何做到这一点

var form = Ext.create('Ext.form.Panel', {
    items: [{
        xtype: 'combo',
        fieldLabel: 'States',
        name: 'states[]',
        multiSelect: true,
        store: [[1, 'Alabama'], [2, 'California'], [3, 'New York'], [7, 'Georgia']],
        value: record.states
    }]
});

我不使用loadRecord并直接设置字段定义中的值。此外,您必须确保值与商店密钥的类型相同。我不得不做

value: record.states.map(function(v) { return parseInt(v); })

因为我的数组是一个字符串数组。

此链接很有用:http://www.sencha.com/forum/showthread.php?149501-Can-t-populating-MultiSelect-control-from-JSON-Store&p=656165&viewfull=1#post656165