Ext JS 4:为什么我的 Ext.data.Store“findRecord”函数没有返回值?

Mac*_*ver 1 grid extjs datastore find categories

下面,我尝试根据为该字段(列)值存储的值,在数据存储中检索网格中类别字段的特定类别记录。“categoryId”的值返回“2”。为什么 findRecord 不返回记录?它显示“类别”为“-1”。当我将它用作表单中下拉列表的组合框存储时,存在 key=2 的记录。我最终想找到 key=2 的记录,然后返回 value 属性,因此它在我的网格视图中显示该记录的 value 属性。

仅供参考:“key”属性是类别记录的 id,“value”属性是我想要显示(或在网格单元中呈现)的类别记录的名称。

店铺类别:

Ext.define('DropdownOption', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'key' },
        { name: 'value' }
    ]
});

var statusDropdownStore = new Ext.data.Store({
    proxy: new Ext.ux.AspWebAjaxProxy({
        url: '/track/Controls/Shared/GeneralService.asmx/GetDropdownOptions',
        actionMethods: {                
            read: 'POST'
        },
        extraParams: {
            user_login: authUser,
            table_name: '[status]'
        },
        reader: {
            type: 'json',
            model: 'DropdownOption',
            root: 'd'
        },
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        }
    })
});   
Run Code Online (Sandbox Code Playgroud)

查看(Ext.grid.Panel)列:

            columns: [

                ... snip ...

                { text: 'Status', dataIndex: 'status', sortable: true, 
                    renderer: function(value, metaData, record, row, col, store, gridView) { 

                        var categoryId = record.get('status');
                        alert("categoryId: " + categoryId);  // displays "categoryId: 2"
                        if (categoryId > 0)
                        {
                            var category = statusDropdownStore.findRecord('key', categoryId);
                            alert("category: " + category);  // displays "category: -1" which usually means not found
                            //alert(category.get('value'));
                            return '';  // return value property of category record
                        }
                        else
                        {
                            return '';
                        }
                    } 
                },

                { text: 'Date Modified', dataIndex: 'date_modified', sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y') },

                ... snip ...

            ],
Run Code Online (Sandbox Code Playgroud)

===================

2012 年 8 月 1 日下午 5:21 更新:

好的,网格初始加载时的值是空白的(意味着它命中了“return '';”代码行。但是当我进入记录并单击“保存”时,网格中的所有行都显示类别名称--使用下面的新代码。作为旁注,我曾经将 id 列命名为“key”,但我将其重命名为“id”。

                { text: 'Status', dataIndex: 'status', sortable: true, 
                    renderer: function(value) { //, metaData, record, row, col, store, gridView) { 

                        if (value > 0) {
                            var r = statusDropdownStore.findRecord('id', value);
                            if (r != null)
                            {
                                var catName = r.get('value');
                                return catName;
                            }
                        }
                        return '';
                    } 
                },
Run Code Online (Sandbox Code Playgroud)

Aci*_*ier 5

你的代码看起来完全没问题,我也对渲染器做了同样的事情:

renderer: function(value) {
    if (value) {
        var record = refStore.findRecord('id', value),
            name = record.get('name');
        return name;
    }
},
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果没有找到,findRecord应该返回,而不是-1。null

我唯一能想到的是文档中的这一点:

当存储被过滤时,仅查找过滤器内的记录。

这是我使用的模型refStore(上面):

Ext.define('MyApp.model.Reference', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'name',  type: 'string'},
        {name: 'active',type: 'bool'}
    ],
});
Run Code Online (Sandbox Code Playgroud)