ember.js - Ember Data,如何使用registerTransform

标签 ember.js ember-data

我已经在谷歌上搜索了一段时间,但没有找到任何好的解决方案。

问题的根源是使用此方法时我的记录没有设置为 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/

相关文章:

javascript - Ember 将 PATCH 调用转换为 PUT

java - Ember POST 请求在 JAX-RS 中使用 XML Jersey 响应进行响应

javascript - Ember 1.13.1 vendor/ Assets 未加载

javascript - 如何强制 ember 数据在重新加载时重置记录的所有字段?

javascript - 如何将对象中 emberjs 变量的值附加到我的 anchor 标记 href?

javascript - Ember.js 2. 使用嵌套模板会消耗更多 RAM 吗?

ember.js - 资源嵌套是启用多个动态段的唯一方法吗?

ember.js - 序列化异步有很多关系

javascript - Ember 。 DS.Adapter 的自定义 createRecord 不会被触发

ember.js - Ember 数据初始化顺序