也许我忽略了什么,但我无法弄清楚我应该如何
我有一个来自服务器的JSON,看起来像这样
{
"articles": [
{
"user": {
"name": "user",
"username": "user",
"_id": "52755cba74a1fbe54a000002"
},
"_id": "5275698c53da846e70000001",
"__v": 0,
"content": "content",
"title": "title",
"created": "2013-11-02T21:07:24.554Z"
}
]
}
在模板中,我正在访问内容并且创建得很好,但是当我尝试获取user.name时,没有任何结果:
{{#each article in model}}
<span>{{ article.title }}</span>
<span>by {{ article.user.name }}</span>
<span>{{ article.created }}</span>
{{/each}}
我注意到在模型中,无论我没有定义,都不会出现在模板中,所以它看起来像这样:
title: DS.attr('string'),
content: DS.attr('string'),
created: DS.attr('date')
但是当我尝试添加:
user: {
name: DS.attr('string')
}
为了匹配嵌套的json,我收到错误。
ember无法处理嵌套的json吗?如果是,那怎么样?
感谢。
答案 0 :(得分:5)
这可能是支持嵌入式文档的最简单方法(如果您不想更改JSON):
App.ArticleSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
user: {embedded: 'always'}
}
})
请参阅:http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html。我没有测试过它!
答案 1 :(得分:3)
如上所述,自Ember Data 1.0 beta 1以来,嵌入式记录发生了重大变化,并且不再支持它。如果您需要嵌入式记录,可以查看ember-data-extensions项目:https://github.com/pixelhandler/ember-data-extensions它通过EmbeddedAdapter和EmbeddedRecordMixins提供对嵌入式记录的支持。
一个简单的实现示例:
App.ApplicationAdapter = DS.EmbeddedAdapter.extend({});
App.ApplicationSerializer = DS.EmbeddedSerializer.extend();
App.Article = DS.Model.extend({
user: DS.belongsTo('user'),
content: DS.attr('string'),
title: DS.attr('string'),
created: DS.attr('date')
});
App.User = DS.Model.extend({
name: DS.attr('string'),
username: DS.attr('string'),
articles: DS.hasMany('article')
})
App.ArticleSerializer = App.ApplicationSerializer.extend({
attrs: {
user: {embedded: 'always'}
}
});
但是你应该知道,只有在加载时才支持嵌入式记录。
答案 2 :(得分:1)
根据过渡指南; Ember数据尚不支持嵌入式记录。
https://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records
有一个如何自己实现它的例子。另一种选择是使用ember-model,它支持嵌入式关联。对不起,我没有例子。