我想就以下问题征求您的意见。
我在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;
感谢您的建议。
答案 0 :(得分:0)
您可以在行编辑器中包含其他组件。
在你的情况下,我建议在非动态属性下放置一个单元格编辑网格,允许两个字段(名称/值),用户可以输入他们想要的内容。
我遇到了类似的问题并用this question and answer解决了这个问题,我认为这个问题涵盖了如何做到这一点。