- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试在序列化函数中解析日期的 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/
我在尝试在序列化函数中解析日期的 Ember Transformer 中遇到错误。 错误信息:“试图在状态 root.loaded.updated.uncommitted 上处理 上的事件 didC
我是一名优秀的程序员,十分优秀!