如何在ember.js中访问复杂的嵌套json

时间:2013-08-02 22:14:26

标签: ember.js

彻底搜索stackoverflow并阅读emberjs.com上的所有文档后,我发现自己陷入困境。我有一个复杂的json对象,我正在尝试在我的ember项目中建模和输出。 我无法控制JSON,否则我会改变它的格式以便更容易消化。那就是说,这是我的问题。

我有以下json

[
{
    "id":1,
    "catId": "10051",
    "catUrl": "path/to/location",
    "childCount": "4",
    "description": [{
        "text": "Description Text"
    }],
    "identifier": "UNQ123456",
    "partialResults": "false"
}
]

我想要了解的是描述中的文本值。我已经尝试创建emberjs.com上描述的hasMany和belongsTo嵌套模型构造,以及许多其他模式,这些模式在堆栈溢出时被描述为答案,但它们似乎都不起作用或匹配我必须工作的数据结构用。 我甚至在本页的第一个代码块中尝试了匿名函数。 http://emberjs.com/guides/models/defining-models/试图将其转换为我想要的文本。

无论如何,我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以定义自定义数据转换来处理特殊的JSON字段。这可以通过使用DS.RESTAdapter.registerTransform函数来完成。这样的事情应该适用于您的用例:

DS.RESTAdapter.registerTransform('descriptionText', {
  serialize: function(data) {
    var text = data[0].text;
    return text;
  },
  deserialize: function(text) {
    var data = [Ember.create({text: text})];
    return data;
  }
});

然后将其用作模型的自定义属性:

App.MyModel = DS.Model.extend({
  ...
  description: DS.attr('descriptionText')
});

请注意,只要您为descriptionText使用相同的名称,转换的名称就可以是DS.attr(...)

希望它有所帮助。