坚持和拒绝对层次关联的不同级别的更改-Extjs 5/Sencha

坚持和拒绝对层次关联的不同级别的更改-Extjs 5/Sencha,extjs,save,models,hierarchical,extjs5,Extjs,Save,Models,Hierarchical,Extjs5,我面临一个非常关键的问题,无法将数据持久化到服务器 我正在构建一个仪表板,用户可以在其中创建新的仪表板并自定义现有的仪表板。仪表板布局将有一行或多行。每行包含一个或多个宽度不同的单元格。每个单元格将有一个或多个小部件实例,其中包含对特定小部件的引用。因此,在另一个表中有关于小部件的数据。我用的是桌上存储 所以我有如下的表格 页面,页面布局,行,单元格,CellWidgetInstance Widget,WidgetInstance 因此,我为上面所有的表建立了模型,并添加了一个用于获取特定页面布

我面临一个非常关键的问题,无法将数据持久化到服务器

我正在构建一个仪表板,用户可以在其中创建新的仪表板并自定义现有的仪表板。仪表板布局将有一行或多行。每行包含一个或多个宽度不同的单元格。每个单元格将有一个或多个小部件实例,其中包含对特定小部件的引用。因此,在另一个表中有关于小部件的数据。我用的是桌上存储

所以我有如下的表格

页面,页面布局,行,单元格,CellWidgetInstance Widget,WidgetInstance

因此,我为上面所有的表建立了模型,并添加了一个用于获取特定页面布局的存储

页面有许多页面布局

页面布局有许多行

行有许多单元格

Cell有许多CellWidgetInstance

CellWidgetInstance有一个WidgetInstance

WidgetInstance有一个小部件

因此,我可以使用存储返回的pageLayout构建页面的整个视图或编辑视图模式。因此,我可以访问Rows集合并继续访问较低级别

现在,当我试图保存更改时,问题来了。在编辑视图中,用户可以添加/删除行、添加/删除/更新单元格、添加/删除WidgetInstances等。 如果用户希望在完成所有这些更改后单击“取消”,则不应转到服务器,我应该能够拒绝不同级别的所有更改。如果用户希望保存,我应该能够在一个事务中保存所有更改

我希望通过向模型添加所有必要的CUD(创建/更新/删除)代理,执行pageLayoutStore.sync()和pageLayoutStore.rejectChanges()可以根据更改调用每个模型的创建/更新/删除URL。但是,尽管sencha支持检索整个层次结构,但它仍然不支持保存为层次结构

所以我现在遇到了一个主要的拦截器,在那里我可以实现我需要的功能,这在大多数情况下是一个非常标准的功能。保存/拒绝模型和关联模型

我花了几个小时搜索网络和sencha论坛,他们说sencha仍然不支持保存相关数据。在一个案例中,有一个变通办法,可以在不使用商店的情况下保存模型。但在我的情况下,我不能这样做,因为用户可能会在编辑后取消

有人能提出一个解决办法吗

非常感谢,,
Dushan

你完全正确-Sencha不支持保存嵌套文档

有一些变通办法。最简单的方法是在顶层使用“auto”类型,在接下来的过程中放弃模型的功能

一个稍微复杂一点的版本是在PageLayout类中使用自定义编写器,这样它就可以构造手动发送的数据;这将为您提供完全控制,并允许您在PageLayout级别保存模型

也可以扩展模型以允许额外的关联类型——我在当前的项目中已经这样做了,但它有点复杂(不,我现在还不能共享它)。如果您只有一个“顶级模型”要以这种嵌套方式保存,那么自定义编写器是最简单的