0

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

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

form.loadRecord(record);

record.states是一个数组int,例如:[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不做任何事情,组合保持为空。

我确定这是我想念的一些常见行为,有人可以指出我正确的方向吗?非常感谢。

4

1 回答 1

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
    }]
});

我不使用loadRecordand 直接设置字段定义中的值。此外,您必须确保值与存储键的类型相同。我必须做

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

于 2013-09-16T22:03:54.737 回答