gpt4 book ai didi

forms - 在 ExtJS 表单中实现复杂的数据结构

转载 作者:行者123 更新时间:2023-12-05 01:08:33 25 4
gpt4 key购买 nike

我们有一个客户需要相当复杂的数据模型。这意味着数据模型不仅非常庞大(大约 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() 方法运行时间很长。

我的问题是如何将其分解,以便每个表单只处理它自己的数据而不是所有数据,我将如何应用自定义设置?

最佳答案

这是我现在使用的解决方案:

首先是一些事实:

  • 我将不得不涵盖多个 R/W 操作(特别是在每个更改并失去焦点的字段之后)
  • 我总是在每个请求中取回所有数据
  • 我必须涵盖大量数据(字段数据、存储数据、标签和配置)
  • 我必须优化这个烂摊子以提高性能
  • 无法在服务器端 session 中存储任何内容
  • 表单被疯狂地嵌套在一起,也可能被拆分或存在两次

  • 这是我现在要做的:

    我放弃了所有关联,并决定只使用一个从带有修改后的模型扩展的模型 getData支持自定义根属性的方法,如 someSubForm (请参阅问题中的示例代码)。这些字段配置为自动,因此需要更改读取器或写入器。
    也许不是坚如磐石,但它确实有效。

    下一个大问题是表格。表单将始终尝试设置每个字段,即使它位于另一个表单中。另外我需要设置很多独立的标签。所以不能使用默认形式,我应该扩展吗?但是我应该如何以及从哪里开始呢?经过长时间查看源代码后,在我看来我无法扩展,所以我决定创建一个完全自定义的表单类以及自定义 mixin 类和自定义 form.basic 类。
    为什么?因为我需要表单只查看直接放入该表单的字段,所以能够设置标签并将模型实例交给任何嵌套表单。

    有了它,我现在可以使用自定义选择器注册我自己的监视器实例。哦,我忘记了关于我的新表格的第一件事;它通过包含名称的属性绑定(bind)到实体(如 someSubForm )。

    这用于
  • 一个项目被添加到表单中
  • 任何字段都得到一个formId
  • 任何标签都会获得一个 formId(不是绑定(bind)到表单的标签)
  • 任何表单都有一个 parentFormId 和实例
  • 监视器选择器设置为
  • 将模型加载到表单中
  • 数据取自模型

  • 其次是现在有 3 个监控实例
  • 使用同样查找实体的新选择器收集所有字段。这样任何子表单字段都会被忽略,因为它们有自己的实体
  • 标签都一样
  • 收集所有表格

  • 第三个是修改后的 loadRecord使用新的 getData() 的方法模型的方法并将特定数据设置为字段,标签和整个模型的任何形式。

    总而言之,我的性能提升了 800%。

    关于forms - 在 ExtJS 表单中实现复杂的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081395/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com