gpt4 book ai didi

javascript - Ember JS,在状态为 root.loaded.updated.uncommitted 的 Transformer 处理事件 `didCommit` 中解析数据时出错。”

转载 作者:行者123 更新时间:2023-11-29 15:39:32 25 4
gpt4 key购买 nike

我在尝试在序列化函数中解析日期的 Ember Transformer 中遇到错误。

错误信息:“试图在状态 root.loaded.updated.uncommitted 上处理 <(DS.Model 的子类):ember1597:8260357> 上的事件 didCommit。”

奇怪的是,数据被正确解析传输到服务器。

代码:

DS.Transform.extend({

deserialize : function(serialized) {

var array = [];

if (Ember.isArray(serialized)) {

serialized.forEach(function(item) {
if (item.feldTyp === "DATE_FIELD" && item.value) {
Ember.set(item, "value", moment(item.value, "DD.MM.YYYY"));
}
array.addObject(Ember.Object.create(item));
});
}

return array;
},

serialize : function(deserialized) {
if (Ember.isArray(deserialized)) {
deserialized.forEach(function(item) {
if (item.get('feldTyp') === "DATE_FIELD" && item.get('value')) {
item.set('value', moment(item.get('value')).format("DD.MM.YYYY"));
}
});
return deserialized;
}

return [];
}
});

item.set('value', moment(item.get('value')).format("DD.MM.YYYY")); 导致错误被注释掉错误消失了。我尝试了其他方法,例如设置静态值或使用 Ember.set 设置值但没有成功。我不太清楚这里出了什么问题,因此想不出解决办法。有人可以帮忙吗?提前致谢。

编辑

解决方法:我将序列化移动到 Controller 中。看起来不那么优雅,但现在可以使用...

最佳答案

如您所知,ember 数据不喜欢在其转换中使用 set。因为数据的服务器表示通常不同于它在客户端的表示方式。 Ember 希望转换不会修改传入的序列化反序列化 值,而是返回新值。

发生此错误的原因是因为 ember 有一个状态机来跟踪与服务器相关的记录状态(请参阅 http://emberjs.com/api/data/classes/DS.RootState.html)。在这种情况下,ember 很可能将记录置于 inFlight 状态。然后它调用转换的序列化函数。当 item.set 被调用时,ember 注意到记录发生了变化,并无意中将记录转换回 uncommitted 状态。服务器响应保存请求后,ember 错误地假设记录仍处于 inFlight 状态,向 didCommit 事件发出信号,以便记录可以转换为 saved状态。因为 uncommitted 状态不支持 didCommit 事件,所以 ember 会抛出错误。

我怀疑您可以通过重写序列化函数以不调用 set 而是返回一个新数组来解决此问题。

    serialize : function(deserialized) {
if (Ember.isArray(deserialized)) {
return deserialized.map(function(item) {
if (item.get('feldTyp') === "DATE_FIELD" && item.get('value')) {
return moment(item.get('value')).format("DD.MM.YYYY");
}
});
}

return [];
}

关于javascript - Ember JS,在状态为 root.loaded.updated.uncommitted 的 Transformer 处理事件 `didCommit` 中解析数据时出错。”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com