Javascript EmberJS:在获取模型后获取模型的单个属性
我有两个型号,一个Javascript EmberJS:在获取模型后获取模型的单个属性,javascript,ember.js,datastore,Javascript,Ember.js,Datastore,我有两个型号,一个用户,有许多消息: App.Router.map(function() { this.resource('user', { path: ':user_id' }, function () { this.route('profile', { path: 'profile' }); this.resource('messages'); }); }); App.User = DS.Model.extend({ displayNam
用户
,有许多消息
:
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')
});
目前,我必须在执行用户搜索时加载整个模型,包括与用户关联的所有消息
我想做的是:
查找,可能是:
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/消息的东西
如何查询与用户关联的消息?我认为{async:true}
是您要查找的。有关它是什么以及如何使用它的一些讨论,请参阅
您可能希望按照以下方式设置模型:
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 } )
});
然后,当您的把手模板请求{{myUser.messages}}
(或{myUser.messages.someProperty}}
时,成员数据将查看用户
模型,并注意消息id(例如,5、10和12)。然后,它将在本地数据存储中查找消息5、10和12。如果有,它将显示它们。如果它们不存在,它将使用您为消息定义的适配器(或者如果没有定义适配器,则使用默认的RESTAdapter
)使用HTTP GET获取这些消息
我相信它会对每个id发出一个请求(而不是对所有id发出一个请求),但这一点我不是百分之百确定。谢谢@Josh,非常有用。批量处理这些请求并在这些请求被触发时进行自定义是很好的,但我认为我们的思路是正确的。是的,我听到了。我想你最好的办法是按照我的回答进行设置,然后使用Chrome开发工具监控网络流量,看看会发生什么实际上是的。我只是不确定,在我上面的例子中,它会执行3个请求,还是1个批处理请求。很高兴它有帮助!