【发布时间】:2013-11-06 16:02:50
【问题描述】:
我不确定这是否是表达我的要求的正确方式。但是“fork”这个词出现在 Ember Data github 页面的路线图中。这是 EPF 的杀手级功能。我想知道我是否可以在 Ember Data 中做到这一点。
当我们有一个编辑页面并绑定一个模型时,fork 功能很有用。当我们编辑信息时,我不希望更改模型属性,因为如果模型属性也显示在其他位置,它们将自动更改。那不是我想要的。
一个示例是页面左侧的列表和页面右侧的特定模型的编辑表单。当我在文本字段中修改角色名称时,由于数据绑定,左侧的角色名称发生了变化。
EPF 通过“分叉”现有模型并将其设置在子会话中来解决此问题。 EPF 中的 session 与 Ember Data 中的 store 类似。当您修改分叉模型时,它不会影响主会话中的模型。分叉模型更新后可以合并回主会话,主会话中对应的模型也会更新。
我认为 Ember Data 中的解决方案是创建一个不同的存储并将模型复制到该存储。但这有点复杂。有没有人有更好的解决方案?我在stackoverflow和ember讨论论坛上搜索,没有找到答案。
【问题讨论】:
-
我想我明白你在说什么。我过去做过类似的事情,但我的解决方案并不是那么好。基本上,我将
Model.toJSON调用到一个新的Em.Object实例中,并将视图绑定到这个新实例,然后当我完成编辑(或任何操作)时,我会序列化回存储中的实际模型(仅更新模型中与新对象不同的属性)。您是否尝试过类似的方法? -
实际上,目前这与我在我的站点中所做的类似。但我选择将
Em.Object封装为模型。我复制模型以绑定到编辑表单。但是这个解决方案对 Ember Data 来说并不好,因为当你想更新一个模型时,你应该给这个模型设置属性并调用save,在这种情况下它还会修改所有其他绑定相同模型的 UI,所以我不能只使用复制的Em.Object来做到这一点。 -
这只是一个想法......当我这样做时,我在调用 store save 之前添加了一个额外的步骤,所以我在控制器中有一个动作来从模型中提取数据和/或每次我需要在绑定到视图的对象中读取或写入时序列化回来。之后我已经转移到事务,所以在我保存之前它们不会传播更改。我有一段时间没有时间接触这个,或者任何与 Ember 相关的东西,就像我说的那样,这只是一个想法
-
啊,你想克隆编辑吗?是的,我使用类似的东西,并且有一个功能可以遍历并替换原始数据。所有人都起床时很笨拙。也许您应该在 ember.js 存储库中请求它?我很想在 ember 中看到这个功能!
-
@Slevin 这不是他(@MilkyWayJoe)所说的。他说他使用了一个简单的 Em.Object,然后在用户完成编辑后他用它来更新模型对象。这是一种“破解”的方式,即编辑模型对象会立即更新,而不是像 darkbaby123 所希望的那样“分叉”。
标签: ember.js ember-data