我有两个模型,一个有很多User
的Messages
:
App.Router.map(function() {
this.resource('user', { path: ':user_id' }, function () {
this.route('profile', { path: 'profile' });
this.resource('messages');
});
});
App.User = DS.Model.extend({
displayName: DS.attr('string'),
email: DS.attr('string'),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
location: DS.attr('string'),
messages: DS.hasMany('message')
});
App.Message = DS.Model.extend({
user: DS.belongsTo('user'),
createdAt: DS.attr('date'),
updatedAt: DS.attr('date'),
fullText: DS.attr('string'),
subject: DS.attr('string'),
recipients: DS.attr('string')
});
当前,当我执行用户搜索时,我必须加载整个模型,包括与用户相关的所有消息。
我想做的是:
检索用户
检索用户的消息(选择用户时)
我在Ember中找不到简单的方法可以做到这一点。我最好的猜测是在路由中致电
find
,可能是:App.UserRoute = Ember.Route.extend({
model: function (params) {
var user = this.store.find('user', params.user_id);
this.store.find('message', { user: 3 });
return user;
}
}
但这会生成url
/messages?user_id=3
。相反,我想要的是类似/users/3/messages
的东西。如何查询与用户关联的消息?
最佳答案
我认为{ async: true }
是您想要的。请参阅http://discuss.emberjs.com/t/what-is-an-async-relationship-async-true-vs-async-false/4107,以获取有关其含义以及如何使用它的一些讨论。
您可能希望像这样设置模型:
App.User = DS.Model.extend({
displayName: DS.attr('string'),
email: DS.attr('string'),
firstName: DS.attr('string'),
lastName: DS.attr('string'),
location: DS.attr('string'),
messages: DS.hasMany('message', { async: true } )
});
然后,当您的Handlebars模板请求
{{myUser.messages}}
(或{{myUser.messages.someProperty}}
Ember数据将查看User
模型)时,请注意消息ID(例如5、10和12)。消息5、10和12的本地数据存储,如果有它们,它将显示它们。如果不存在,它将使用为Message
定义的适配器(或者如果未定义适配器)默认RESTAdapter
)以使用HTTP GET来获取这些内容。我相信它将为每个ID发出一个请求(与对所有ID发出一个请求相比),但这并不是我100%确定的事情。
关于javascript - EmberJS:提取模型后,获取模型的单个属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25222720/