Extjs - 在属性网格中显示嵌套对象

Posted

技术标签:

【中文标题】Extjs - 在属性网格中显示嵌套对象【英文标题】:Extjs - Display nested objects in Property grid 【发布时间】:2021-06-30 08:09:16 【问题描述】:

我试图在 propertygrid 中显示我的 JSON,其中我有 JSON 结构的嵌套级别。根据属性网格文档,支持的唯一类型是布尔、字符串、日期、数字。所以我只能看到扁平化级别信息,而不是嵌套对象。

想知道propertygrid 中是否有任何配置可以让我显示和编辑嵌套信息?或任何其他可用的组件,而不是propertygrid

以下是示例配置和fiddle:

Ext.create('Ext.grid.property.Grid', 
    title: 'Properties Grid',
    width: 300,
    renderTo: Ext.getBody(),
    source: 
        "allowBlank": "My Object",
        "minValue": 1,
        "maxValue": 10,
        "itemDetails": 
            "name": "name 1",
            "type": "Object"
        ,
        "Description": "A test object"
    ,
    sourceConfig: 
        allowBlank: 
            displayName: 'Required'
        

    
);

【问题讨论】:

Fiddle 挂了。 是的,目前没有示例有效 【参考方案1】:

您可以使用可编辑的列树:

var store = Ext.create('Ext.data.TreeStore', 
    root: 
        expanded: true,
        children: [
            text: "allowBlank",
            value: "My Object",
            leaf: true
        , 
            text: "minValue",
            value: "1",
            leaf: true
        , 
            text: "maxValue",
            value: 10,
            leaf: true
        , 
            text: "itemDetails",
            value: "",
            expanded: true,
            children: [
                text: "name",
                value: "name 1",
                leaf: true
            , 
                text: "type",
                value: "Object",
                leaf: true
            ]
        , 
            text: "Description",
            value: "A test object",
            leaf: true
        ]
    
);

Ext.create('Ext.tree.Panel', 
    title: 'Simple Tree',
    height: 200,
    store: store,
    rootVisible: false,
    plugins: 
        cellediting: 
            clicksToEdit: 2,
            listeners: 
                beforeedit: function (editor, context, eOpts) 
                    if (!context.record.isLeaf()) 
                        return false;
                    
                    var column = context.column;
                    switch (typeof context.record.get('value')) 
                    case "string":
                        column.setEditor(
                            xtype: 'textfield'
                        );
                        return;
                    case "number":
                        column.setEditor(
                            xtype: 'numberfield'
                        );
                        return;
                    //...
                    //...
                    default:
                        column.setEditor(
                            xtype: 'textfield'
                        );
                        return;
                    
                ,
            
        
    ,
    columns: [
        xtype: 'treecolumn',
        text: 'Headers',
        dataIndex: 'text'
    , 
        text: 'Value',
        dataIndex: 'value',
        editor: 
            xtype: 'textfield'
        
    ],
    renderTo: Ext.getBody()
);

【讨论】:

感谢您的回答,但有没有其他方法可以代替treepanel。我想避免它只有这个组件。 嗯,我不知道嵌套对象作为树的任何其他表示形式。为什么要避免使用树组件? 通过避免我的意思是我将它保留为在嵌套树结构中显示 JSON 的最后一个选项。 Propertygrid 提供了获取整个 json 的灵活性,并避免在内部创建商店时创建商店,但显示除该树之外的平面级别结构也是一种选择。只是想知道可用的选项,而您已经给出了答案。 Treegrid 不适合您? fiddle.sencha.com/#fiddle/hrm&view/editor

以上是关于Extjs - 在属性网格中显示嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章

在 ExtJS4 TreeGrid 中加载嵌套的 JSON 数据

如何在ExtJS(和Sencha架构师)的GridPanel中显示嵌套对象?

EXTJS 网格面板侦听器 - 从对象中检索数据

extjs5 嵌套网格(表:子表)

将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

如何在具有嵌套数据的网格中设置组合框值? Extjs 4.2 Mvc