使用postgres json字段和ember数据

时间:2015-01-28 18:51:48

标签: javascript json postgresql ember.js ember-data

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

数据如下:

colors

我的输入如下:

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

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

Color Pickers

到目前为止,我尝试了三种不同的变换:

json.js

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

raw.js

export default DS.Transform.extend({

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

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

});

object.js

import DS from 'ember-data';

export default DS.Transform.extend({

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

  serialize: function(deserialized) {
    return deserialized;
  }

});

所有出现以获得相同的结果,更新字段不会修改对象。如何使用像这样的ember-data序列化/绑定/更新json对象?

2 个答案:

答案 0 :(得分:2)

如果没有在DS.attr()中指定类型,它只是传递原始对象,您可以在此处看到:http://emberjs.jsbin.com/zitobi/2/edit

答案 1 :(得分:1)

在这种情况下,我认为。序列化,意味着将对象变为常规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