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

时间:2014-10-31 08:40:23

标签: extjs save models hierarchical extjs5

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

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

所以我有如下表格。

Page,PageLayout,Row,Cell,CellWidgetInstance Widget,WidgetInstance

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

Page HasMany PageLayout

PageLayout HasMany Row

行HasMany Cell

Cell HasMany CellWidgetInstance

CellWidgetInstance HasOne WidgetInstance

WidgetInstance HasOne小部件

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

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

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

因此,我现在正在寻找一个主要的阻止程序,我可以在其中实现我需要的功能,这在大多数情况下是非常标准的功能。保存/拒绝模型和相关模型。

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

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

非常感谢, 独山

1 个答案:

答案 0 :(得分:0)

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

有一些解决方法。最简单的方法是在顶层使用“自动”类型,并在剩下的时间内放弃模型的力量。

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

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