使用带有 ember 数据的 postgres json 字段

Using postgres json field with ember data

我有一个 rails api 吐出一个名为 colors 的类型 json 的 postgres 字段。我有一系列可以更改的输入字段,我希望可以在每个字段更改时修改此 json 对象上的键,但绑定似乎没有按预期工作。

数据如下:

 "colors": { "primary_color": "#c43535", "secondary_color": "#0000FF" }

我的输入如下:

{{input type="text" class="form-control" value=model.colors.primary_color}}
{{input type="text" class="form-control" value=model.colors.secondary_color}}

这会在字段中显示正确的颜色,但是当我更新字段时,JSON 对象在 Ember 检查器中似乎没有更新。

到目前为止我已经尝试了三种不同的转换:

json.js

export default DS.Transform.extend({

  deserialize: function(serialized) {
    return JSON.parse(serialized);
  },

  serialize: function(deserialized) {
    return JSON.stringify(deserialized);
  }

});

raw.js

import DS from 'ember-data';

export default DS.Transform.extend({

  deserialize: function(serialized) {
    return serialized;
  },

  serialize: function(deserialized) {
    return deserialized;
  }

});

object.js

export default DS.Transform.extend({

  deserialize: function(serialized) {
    return Ember.isNone(serialized) ? {} : serialized;
  },

  serialize: function(deserialized) {
    return Ember.isNone(deserialized) ? {} : deserialized;
  }

});

所有 出现 具有相同的结果,即更新字段不会修改对象。我如何 serialize/bind/update 具有 ember 数据的 json 对象?

通过在DS.attr()中不指定类型,它只是传递原始对象,你可以在这里看到:http://emberjs.jsbin.com/zitobi/2/edit

在这种情况下,我认为。序列化,就是把对象变成一个普通的JSON对象,反序列化,就是把它变成一个Ember对象。

App.PrimaryColorTransform = DS.Transform.extend({
  serialize: function(value) {
    return value.get('primary_color');
  },
  deserialize: function(value) {
    return Ember.create({ primary_color: value[0]});
  }
});

App.Color = DS.Model.extend({
  primary_color: DS.attr('primaryColor'),

});

http://emberjs.com/guides/models/the-rest-adapter/#toc_creating-custom-transformations