持久化和拒绝对层次关联的不同级别的更改 - 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的主要内容,如果未能解决你的问题,请参考以下文章