2

我在用于添加和编辑我的一个模型的表单上有一个组合框。组合框绑定的值列表可能非常大(1,000 条记录),因此我需要使用带有分页功能的远程数据存储,以防止必须一次加载所有值。在添加表单中,这很好用,但是当我尝试使用表单编辑模型时,我无法可靠地将值设置为组合框。

当组合框加载时,存储加载前 50 条记录。问题是,组合框 setValue 函数在设置值之前仅搜索存储中加载的值以查找记录。如果所选记录不在存储区的前 50 条记录中,则 setValue 不会找到它并且不会设置值。

我创建了一个演示该问题的 jsFiddle:http: //jsfiddle.net/mgolus/Z3Jpy/

代码如下:

var testVendorId;
testVendorId = 30; // Works
//testVendorId = 60; // Doesn't Work :-(

Ext.onReady(function() {
    var addUserForm = Ext.create('Ext.form.Panel', {
    renderTo: Ext.getBody(),
    model: 'Test.model.CatalogItem',
    items: [
            {
                xtype: 'textfield',
                name: 'number',
                fieldLabel: 'Number'
            },
            {
                xtype: 'combobox',
                name: 'vendorId',
                fieldLabel: 'Vendor',
                forceSelection: true,
                store: {
                    model: 'Test.model.Vendor',
                    autoLoad: true,
                    pageSize: 50
                },
                displayField: 'name',
                valueField: 'id',
                pageSize: 50 // I know this just needs to be any value > 0 to show the pager, just putting 50 for consistency
            }
        ],
    });

    addUserForm.down('combobox').getStore().on('load', function() {
            var user = Ext.create('Test.model.CatalogItem', { id: 1, number: 'T001', vendorId: testVendorId });
            console.log(user);
            addUserForm.loadRecord(user);    
    });


});

Ext.define('Test.model.CatalogItem', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id' },
        { name: 'number' },
        { name: 'vendorId' }
    ] 
});

Ext.define('Test.model.Vendor', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id' },
        { name: 'name' }
    ],
    proxy: {
        type: 'jsonp',
        url: 'http://pmvitals.com/vendors.aspx',
        reader: {
            root: 'data'
        }
    }
});

当所选ID(顶部的TestVendorId设置)为30时,Combobox用默认值填充。如果您将 id 设置为超过 50 的任何值,则不会填充该值,因为它不存在于商店的第一页中。

任何帮助是极大的赞赏!

4

1 回答 1

2

我遇到了类似的问题。为了克服它,我创建了组合框的自定义扩展(我称之为 RemoteComboBox)。它的主要特性之一是,如果它的值是通过表单记录加载设置的,或者甚至只是 setValue(),则默认加载行为是对实际值进行远程请求。这将返回 1 值,因此响应很小,然后一旦用户再次开始与组合框交互,组合框的默认行为就会接管。

我的解决方案和您的需求的不同之处在于您仍然会遇到分页问题。即使您的值最初是通过基于 id 的请求找到的,您仍然面临在多页记录中定位相同项目的挑战。

但是,您真的需要分页吗?我发现简单地提供更丰富的搜索工具通常比强迫用户筛选几页记录更有帮助。

于 2013-05-18T03:04:15.737 回答