在ember.js web应用程序中,伪持久化状态应该存在于何处

Where should faux-persisted state live in your ember.js web app?

本文关键字:状态 持久化 于何处 存在 js ember web 应用程序      更新时间:2023-09-26

我最近读了@twbrandt的一篇优秀的《开始使用ember.js》帖子,发现他对控制器/view/model/router/template"应该负责什么"的解释很有趣。

当你有一个数据库支持的模型时,一切都很好,把持久化状态放在模型对象中,任何没有持久化的状态都很可能在控制器中找到。

但想象一下,你允许你的客户定义一个给定的模型是什么样子的(某种配置)。从这个配置中,您需要构建一个"结构"来在运行时添加这些模型。

例如,您允许客户定义他们的业务每天营业的小时数。从这个配置中,你需要在页面上添加一个空的或"人造"的模型来填充一整天。您创建这些伪模型是因为对于每个工作日,您还需要获取这些模型的持久版本(因为客户实际上可以使用应用程序创建一个)。

因此,使用配置,我只剩下一个模型(它实际上被保存到数据库等中),但我需要将这个模型与一个并不存在的模型混合在一起,但在手把模板中,有一个填充版本真的很有帮助,这样html就不复杂了(将逻辑保持在javascript中)。

目前,我将这种逻辑存储在模型本身上,因为持久化的实际模型和作为单个数组绑定到把手模板的伪模型/占位符之间存在"混合"(但通常只有一些是持久化支持的模型)。

我的问题是,这个数组是否应该是控制器的一部分,因为"其中一些"没有备份?或者,整个数组应该是ember数据的"find"方法的覆盖(就像我现在所做的那样),以启用"当存在时用真实模型替换每个伪模型"行为?

提前感谢

视图使用控制器来显示数据。控制器是模型的代理,视图可以显示来自模型的信息。

但您不必将模板链接到模型。您可以在控制器上使用车把模板中使用的属性。然后由您在持久化相关记录时将这些数据传输/操作到模型。您的模型上也可以有非DS.attr的属性,因此不会持久化。

用一个样本来回答/理解你的问题会更容易。