我正在尝试为我的模型设置属性,但在嵌套对象时遇到问题。这就是我所拥有的
App.Posts = DS.Model.extend({
title: DS.attr('string'),
author: {
name: DS.attr('string')
},
date: DS.attr('date'),
excerpt: DS.attr('string'),
body: DS.attr('string')
});
我想如何声明作者对象?
在ember检查器中,当我查看数据并在App.post下并选择其中一行时。它有一个属性App.Post,属性为author:{name:[Object]}
这里是JS Bin链接http://jsbin.com/tesozepexaqi/2/
答案 0 :(得分:1)
从以下的Ember文档中调整this example应该可以正常工作:
App.Post = DS.Model.extend({
title: DS.attr('string'),
author: DS.belongsTo('author'),
date: DS.attr('date'),
excerpt: DS.attr('string'),
body: DS.attr('string')
});
App.Author = DS.Model.extend({
post: DS.belongsTo('post')
})
答案 1 :(得分:1)
Ember在没有Ember Data的情况下完美无缺。让我们假装我们想用Ember Data做这件事:
Ember Data的记录应该是持平的。这意味着所有属性都处于顶层。如果您有更深层次的相关数据,他们通常会生活在不同的记录中。如果您尝试嵌入记录,则需要查看嵌入式记录的棘手世界(Ember-data embedded records current state?)。至少这些相关记录必须定义一个id。所以这是一个从服务器返回的数据应该是什么样子的例子。
{
posts:[
{
id: '1',
title: 'My name is Django.',
author: {
id:1,
name: 'D name'
},
date: new Date('08-15-2014'),
excerpt: 'The D is silent.',
body: 'The D is silent.'
},
{
id: '2',
title: 'White horse',
author: {
id:2,
name: 'horse name'
},
date: new Date('08-15-2014'),
excerpt: 'Is what I ride.',
body: 'My horse likes to dance.'
}
]
}
App.ApplicationAdapter = DS.RESTAdapter.extend();
App.PostSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
author: {embedded: 'always'}
}
});
App.Post = DS.Model.extend({
title: DS.attr('string'),
author: DS.belongsTo('author'),
date: DS.attr('date'),
excerpt: DS.attr('string'),
body: DS.attr('string')
});
App.Author = DS.Model.extend({
name: DS.attr()
});
示例:http://jsbin.com/vazada/1/edit
另一个小技巧,你不想在使用路线时使用全局变量,你可以使用modelFor
从不同的路线获取模型。
App.PostsRoute = Ember.Route.extend({
model: function() {
return this.store.find('post');
}
});
App.PostRoute = Ember.Route.extend({
model: function(params) {
var posts = this.modelFor('posts');
return posts.findBy('id', params.post_id);
}
});
就我个人而言,我认为Ember Data有点矫枉过正。 Ember与POJO完美配合。如果您需要缓存和回滚功能,那么Ember Data可能是一个很好的解决方案。