编辑器网格中的自定义类型存储字段未正确映射

Posted

技术标签:

【中文标题】编辑器网格中的自定义类型存储字段未正确映射【英文标题】:Custom type store field in an Editor Grid is not mapped correctly 【发布时间】:2012-01-04 08:33:13 【问题描述】:

我有一个编辑器网格和一个包含自定义类型的商店。

商店:

var sourceStore = new Ext.data.JsonStore(
    url: hp,
    storeId: 'labels-data-store',
    idProperty: 'ID',
    root: 'results',
    fields: [
        name: 'ID',
        type: 'int'
    , 
        name: 'LanguageID',
        type: 'int'
    , 
        name: 'KeyID',
        type: 'int'
    , 
        name: 'Value',
        type: 'string'
    , 
        name: 'ToolTip',
        type: 'string'
    , 
        name: 'LanguageName',
        type: 'string'
    , 
        name: 'KeyInfo',
        type: 'LanguageKeyInfo'
    ,
    CUSTOM TYPE HERE !! !
        name: 'ServerComments',
        type: 'string'
    ]
);

编辑器网格:

var sourceGrid = new Ext.grid.EditorGridPanel(
    id: 'source-grid',
    region: 'center',
    title: localize.sourceView,
    iconCls: 'source-view-title',
    store: sourceStore,
    trackMouseOver: true,
    disableSelection: false,
    loadMask: true,
    split: true,
    stripeRows: true,
    border: true,
    autoExpandColumn: 'label',
    cm: sourceColModel,

    // customize view config
    viewConfig: 
        forceFit: true,
        enableRowBody: true,
        showPreview: false,
        emptyText: localize.noRecordsFound
    ,

    sm: new Ext.grid.RowSelectionModel(
        singleSelect: false,
        moveEditorOnEnter: true
    )
);

客户类型实现:

LanguageKeyInfo = function () 
    this.ID = arguments[0];
    this.Value = arguments[1];
    this.Description = arguments[2];


Ext.data.Types.LANGUAGEKEYINFO = 
    convert: function (v, data) 

        if (!data) 
            return null;
        

        if (!data.KeyInfo) 
            return null;
        

        return new LanguageKeyInfo(
        data.KeyInfo.ID,
        data.KeyInfo.Value,
        data.KeyInfo.Description);
    ,

    sortType: function (key) 
        return key.ID;
    ,

    type: 'LanguageKeyInfo'

源列模型:

var sourceColModel = new Ext.grid.ColumnModel(
    columns: [
        header: 'ID',
        dataIndex: 'ID',
        width: 50,
        hidden: true,
        sortable: true
    , 
        header: 'Language ID',
        dataIndex: 'LanguageID',
        width: 50,
        hidden: true,
        sortable: true
    , 
        header: 'Language',
        dataIndex: 'LanguageName',
        width: 20,
        hidden: true,
        sortable: true
    , 
        header: 'Key ID',
        dataIndex: 'KeyID',
        width: 30,
        hidden: true,
        sortable: true
    , 
        header: 'Key',
        dataIndex: 'KeyValue',
        width: 40,
        sortable: true,
        editor: new Ext.form.TextField(
            allowBlank: false,
            maxLength: 200
        )
    , 
        header: 'Label',
        dataIndex: 'Value',
        sortable: true,
        editor: new Ext.form.TextField(
            allowBlank: false,
            maxLength: 500
        ),
        renderer: function (sc) 
            var lanID = getSelectedLanguageID() ? getSelectedLanguageID() : 1;
            switch (parseInt(lanID)) 
                case 2:
                    return '<div class="rtl">' + sc + '</div>';
                default:
                    return sc;
            
        
    , 
        header: 'Description',
        dataIndex: 'KeyDescription',
        width: 30,
        editor: new Ext.form.TextField(
            allowBlank: true,
            vtype: 'englishOnly',
            maxLength: 100
        )
    , 
        header: 'Tool Tip',
        dataIndex: 'ToolTip',
        width: 80,
        sortable: true,
        editor: new Ext.form.TextField(
            allowBlank: true,
            maxLength: 200
        )
    ]
);

当我开始编辑第一列行时,文本字段值为 [object,object],这意味着网格将 KeyInfo 对象传递给文本框值。

如何将 KeyInfo 属性之一发送到文本框并将其映射到存储记录??

【问题讨论】:

能否显示自定义类型字段的列模型定义? 【参考方案1】:

首先,您的 dataIndex 没有引用有效的记录映射: dataIndex: 'KeyValue', 应该是 dataIndex: 'KeyInfo', 其次,我认为网格编辑器上不支持自定义类型。当然我可能是错的。

【讨论】:

您对数据索引的看法是正确的。我还没有找到有关自定义类型的网格支持的任何信息。如果可以在主题上遮住一些光线,那就太好了。感谢您的重播。

以上是关于编辑器网格中的自定义类型存储字段未正确映射的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 存储共享首选项中的自定义类列表

如何为具有映射到多个柴油列的自定义字段的类型派生 Queryable?

EasyAdmin:字段的自定义类型

使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段

无法专门化std :: hash来存储unordered_map中的自定义类型

Hibernate中的自定义类型——UserTypeCompositeUserType