我们有一个客户需要相当复杂的数据模型。这意味着数据模型不仅非常庞大(大约 500-1000 个字段,嵌套在许多对象中),还需要在任何时候发送和接收所有数据,这就是字段发生变化(在失去焦点之后)。我们将其全部作为 JSON 获取。这是一个结构示例:
{
data: {
somefield: 'some content'
},
label: {
somelabel: 'some label text'
},
applyable: {
somefield: {
visible: false
}
}
someSubForm: {
data: {
somefield: 'some content'
},
label: {
somelabel: 'some label text'
},
anotherSubForm: {
data: {
somefield: 'some content'
},
label: {
somelabel: 'some label text'
}
}
}
}
但这还不是全部;该模型还包含标签、工具提示和其他配置。所有数据都需要显示在多个选项卡中,其中可能会在两个不同的选项卡中显示相同的数据。由于所需的布局(由客户定义),表单将相互嵌套。
后端由我们的客户提供,因此我无法在此处更改任何内容。
我首先使用具有已定义代理的单个模型来加载 JSON。但在那之后我遇到了几个问题。
首先是表单将始终跟踪所有字段,即使是嵌套表单
其次是我无法更改任何标签或应用自定义设置
第三,由于数据量很大,loadRecord() 和 getValues() 方法运行时间很长。
我的问题是如何将其分解,以便每个表单只处理它自己的数据而不是所有数据,我将如何应用自定义设置?
最佳答案
这是我现在使用的解决方案:
首先是一些事实:
这是我现在要做的:
我放弃了所有关联,并决定只使用一个从带有修改后的模型扩展的模型
getData
支持自定义根属性的方法,如 someSubForm
(请参阅问题中的示例代码)。这些字段配置为自动,因此需要更改读取器或写入器。也许不是坚如磐石,但它确实有效。
下一个大问题是表格。表单将始终尝试设置每个字段,即使它位于另一个表单中。另外我需要设置很多独立的标签。所以不能使用默认形式,我应该扩展吗?但是我应该如何以及从哪里开始呢?经过长时间查看源代码后,在我看来我无法扩展,所以我决定创建一个完全自定义的表单类以及自定义 mixin 类和自定义 form.basic 类。
为什么?因为我需要表单只查看直接放入该表单的字段,所以能够设置标签并将模型实例交给任何嵌套表单。
有了它,我现在可以使用自定义选择器注册我自己的监视器实例。哦,我忘记了关于我的新表格的第一件事;它通过包含名称的属性绑定(bind)到实体(如
someSubForm
)。这用于
其次是现在有 3 个监控实例
第三个是修改后的
loadRecord
使用新的 getData()
的方法模型的方法并将特定数据设置为字段,标签和整个模型的任何形式。总而言之,我的性能提升了 800%。
关于forms - 在 ExtJS 表单中实现复杂的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081395/