我已经在谷歌上搜索了一段时间,但没有找到任何好的解决方案。
问题的根源是使用此方法时我的记录没有设置为 isDirty
:
DS.JSONTransforms.object = {
deserialize: function(serialized) {
return Ember.isNone(serialized) ? {} : serialized;
},
serialize: function(deserialized) {
return Ember.isNone(deserialized) ? {} : deserialized;
}
}
据我所知,这是一种旧方法,显然仍然有效,因为它处理我向其抛出的 JSON 对象,但在进行编辑时它不会将我的记录设置为 isDirty
。
您现在应该在适配器上使用 registerTransform
(根据此 https://github.com/emberjs/data/issues/517 )。但是我的自定义转换没有被注册,所以我想我把它放在了错误的位置(与我之前的 JSONTransforms 相同的位置)。
DS.RESTAdapter.registerTransform('object', {
deserialize: function(serialized) {
return Em.none(serialized) ? {} : serialized;
},
serialize: function(deserialized) {
return Em.none(deserialized) ? {} : deserialized;
}
});
有人有这方面的知识可以分享吗?
最佳答案
isDirty
的问题并不是因为您没有使用 registerTransform
,行为是相同的。
目前,Ember Data 不支持对象属性,困难之一实际上是观察设置 isDirty
标志的变化。
有一个open issue为此,您可以在 github 上进行跟踪。
解决方法是将嵌套对象声明为正确的 DS.Model
并设置它们之间的嵌入关系。
举个例子,假设您有一个随帖子一起发送的日期对象:
{post: {
id: 12
title: "EmberData accept object attributes, you do not need this anymore !!"
date: {
day: "01"
month: "03"
year: "2013"
}
}}
您将声明模型如下:
App.Post = DS.Model.extend({
title: DS.attr('string'),
date: DS.belongsTo('App.PostDate')
});
App.PostDate = DS.Model.extend({
post: DS.belongsTo('App.Post'),
day: DS.attr('string'),
month: DS.attr('string'),
year: DS.attr('string'),
});
并在适配器中添加映射:
DS.RESTAdapter.map('App.Post',{
date:{
embedded:'always'
}
})
参见this answer有关嵌入式映射选项的更多详细信息。
关于ember.js - Ember Data,如何使用registerTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695370/