Extjs梳子不会得到初始值,只显示

时间:2011-03-27 20:27:03

标签: extjs combobox


我有一个组合形式(hiddenName como)。 表单从服务器加载其数据并自动设置“selectedValue”。 组合在表单加载其数据之前从服务器加载其值。 如果我点击提交,即使我设置了hiddenName,displayValue也会被发送到服务器而不是值。 但是如果我更改了组合值,那么它将按预期提交值而不是displayValue。 为什么表单设置的初始值会阻止组合提交其值?

这是组合和商店:

var store = new Ext.data.JsonStore({
        autoLoad: true,
        url: config.url,
        root: 'data',
        methos:'POST',
        fields:[{name:'userManager_employeeId'},{name:'userManager_userName'}] });

    var combo  = new Ext.form.ComboBox({
        hiddenName:'userManager',
        valueField: 'userManager_employeeId',
        displayField: 'userManager_userName',
        forceSelection: true,
        mode: 'remote',    
        typeAhead: true,
        lazyInit :false,
        lazyRender:false,
        fieldLabel:     config.title,
        emptyText:'Select a value',
        roles:config.roles,

修改

这是表单数据:

{
    "data": [
        {
            "employee_employeeId": 3,
            "Affiliate_affiliateId": 8,
            "parent_affiliateId": 8,
            "userManager_employeeId": 1,
            "Affiliate_email": "avi@finexo.co.il",
            "parent_name": "First Affiliate",
            "userManager": "admin",
            "Affiliate_name": "First Affiliate",
            "user_userName": "admin",
            "user_userId": 1
        }
    ]
}

这是组合数据:

{
    "data": [
        {
            "userManager_userName": "admin",
            "userManager_employeeId": 1
        },
        {
            "userManager_userName": "admin2",
            "userManager_employeeId": 4
        }
    ]
}

这是表格阅读器:

    reader: new Ext.data.JsonReader({
            root: 'data',
            fields: [{
                name: 'userManager'
            }]
        })

这是表单数据:

{"data":[{"userManager":"admin"}]}

我也尝试过:

{"data":[{"userManager":"1"}]}

如果表单数据是“admin”,我会在显示“admin”中看到,但提交的值也是“admin”。 如果表单数据为“1”,我在显示“1”和提交值“1”中看到。 我如何在显示'admin'中看到并提交值(“1”)?感谢。

1 个答案:

答案 0 :(得分:1)

我已经遇到了这个问题,我已经有了一个插件,我将其包含在带有组合的表单中。在您的情况下,您需要关闭组合商店中的autoload。使用组合的valueField填充表单,就像您提供的第二个示例一样。然后修改服务器端代码以搜索valueFields displayFields,而不仅仅是displayFields。然后,您可以在表单加载后执行此操作:

combo.getStore().load({
   params: { query: combo.getValue()},
   callback: function () { combo.setValue(combo.getValue()) }
});

这将仅为id 1向服务器发送请求,服务器将使用组合数据来回复以修复其displayField。然后setValue设置displayField和valueField。这是一种解决方法,但它确实有效。