【问题标题】:Using postgres json field with ember data使用带有 ember 数据的 postgres json 字段
【发布时间】:2015-03-27 19:36:09
【问题描述】:

我有一个 Rails api,它会输出一个名为 colorsjson 类型的 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}}

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

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

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;
  }

});

所有似乎都具有相同的结果,即更新字段不会修改对象。如何使用 ember-data 像这样序列化/绑定/更新 json 对象?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 对,这对于显示属性非常有用,但是在更改时不会更新与对象的绑定。
    • 如果您在第一次转换中使用它会怎样:Ember.Object.create(JSON.parse(serialized))
    • "SyntaxError: Unexpected token o" :(
    • 似乎传递给 JSON.parse 的格式错误的 JSON 字符串,@typeoneerror
    • 这似乎可以解决问题:gist.github.com/typeoneerror/ea854cfa9341f1388c37.
    【解决方案2】:

    在这种情况下,我想。序列化,就是把对象变成一个普通的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

    【讨论】:

    • 让我朝着正确的方向前进:gist.github.com/typeoneerror/ea854cfa9341f1388c37。我现在可以在 Ember Inspector 中看到更新的值。不确定我是否应该在serialize 中进行 JSON.stringify 以保存到 PSQL,现在探索。
    • 很高兴我能提供帮助。我不确定你是否需要 JSON.stringify,我认为不需要,至少这里不需要。
    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 2017-10-09
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多