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

Posted

技术标签:

【中文标题】持久化和拒绝对层次关联的不同级别的更改 - Extjs 5/Sencha【英文标题】:Persisting and rejecting changes to different levels of a hierarchical association - Extjs 5/Sencha 【发布时间】:2014-10-31 08:40:22 【问题描述】:

我面临一个非常严重的问题,即我无法将数据保存到服务器。

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

所以我有如下表格。

页面、页面布局、行、单元格、CellWidgetInstance 小部件,WidgetInstance

所以我有上面所有表格的模型,并添加了一个商店来获取特定的页面布局。

页面有很多页面布局

页面布局有很多行

Row HasMany 单元格

Cell HasMany CellWidgetInstance

CellWidgetInstance 有一个 WidgetInstance

WidgetInstance 有一个小部件

所以我可以使用从商店返回的 pageLayout 构建页面的整个视图或编辑视图模式。所以我可以访问 Rows 集合并继续到较低的级别。

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

我希望通过将所有必要的 CUD(创建/更新/删除)代理添加到模型中,执行 pageLayoutStore.sync() 和 pageLayoutStore.rejectChanges() 将完成调用每个模型的创建/更新/删除 URL 的技巧变化。但似乎虽然 sencha 支持检索整个层次结构,但它仍然不支持保存为层次结构。

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

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

有人可以建议解决这个问题吗?

非常感谢, 独山

【问题讨论】:

【参考方案1】:

你说得对——Sencha 不支持保存嵌套文档。

有一些解决方法。最简单的一种是在顶层使用 'auto' 类型,并在其余部分放弃模型的功能。

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

还可以扩展 Model 以允许其他关联类型 - 我已经为我当前的项目完成了此操作,但它有些复杂(而且,不,我目前无法分享它)。如果您只有一个“***模型”要以这种嵌套方式保存,那么自定义编写器是最简单的。

【讨论】:

以上是关于持久化和拒绝对层次关联的不同级别的更改 - Extjs 5/Sencha的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 是不是关联嵌套在任何级别的子查询?

在平行继承层次结构中通过父母关联孩子

子上下文更改传播到其他子上下文(相同层次结构级别)而不合并

使用 sequelize 创建具有关联层次结构的对象

QTreeView,每个级别的样式不同

Power Query 能否以不同级别的小计详细信息对数据进行表格化?