什么是一个好的ExtJS组件来管理具有动态键/值对的Map数据结构

时间:2016-06-07 17:30:04

标签: jpa extjs4

我想就以下问题征求您的意见。

我在JSON中有一个实体表示,如下所示:

{
  id: 1,
  prop1: "someValue",
  prop2: "someValue",
  dynamicProperties: {
    name1: "value1",
    name2: "value2",
    name3: "value3"
  }
}

如您所见,我的实体具有可以取任何值的属性“prop1”和“prop2”,并且它还具有可以具有可变数量属性的属性“dynamicProperties”(例如“name1,”name2“, “name3”,依此类推。)

我希望我的用户能够创建/更新/删除属性dynamicProperties。也就是说,可以添加值为“value4”的新属性“name4”并更改属性“name2”的值和/或删除“name1”/“value1”对。

我最初考虑使用Ext.grid.PropertyGrid来显示dynamicProperties。这允许我编辑我的属性的值,但它不允许我添加新属性。默认情况下,PropertyGrid的名称列不可编辑,我无法更改此内容。

有没有办法实现我想要的目标?

我想到的唯一选择是将我的JSON表示更改为类似下面的JSON,并使用常规的Ext.grid.Panel来管理它:

{
  id: 1,
  prop1: "someValue",
  prop2: "someValue",
  dynamicProperties: [
    {
      name: "name1",
      value: "value1"
    },
    {
      name: "name2",
      value: "value2"
    },
    {
      name: "name3",
      value: "value3"
    }
  ]
}

我不喜欢这种方法,因为我需要验证名称必须是唯一的,并且可能添加id属性。

在后端我使用Java实体,其中dynamicProperties是这样的HashMap:

    @ElementCollection
    @MapKeyColumn(name="name")
    @Column(name="value")
    @CollectionTable(name="entity_dynamic_properties", joinColumns=@JoinColumn(name="entity_id"))
    private Map<String, String> dynamicProperties;

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

您可以在行编辑器中包含其他组件。

在你的情况下,我建议在非动态属性下放置一个单元格编辑网格,允许两个字段(名称/值),用户可以输入他们想要的内容。

我遇到了类似的问题并用this question and answer解决了这个问题,我认为这个问题涵盖了如何做到这一点。