我试图在同一条路线上加载两个不同的模型,我发现了一个堆栈溢出,解释了我可以Ember.RSVP.hash()用来完成这个,这就是我为使其工作所做的.
model: function(params) {
return Ember.RSVP.hash({
flyer: this.store.find('flyer', params.flyer_id),
images: this.store.find('image', '-Jrgar1tSArUw-_PiJqX')
});
},
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我已经硬编码了我需要加载的图像记录的ID,这应该来自返回的传单,就像这样 flyer.imagesID
但是当我这样做时,我在控制台中出现错误,这是堆栈跟踪...
Error while processing route: flyers flyer is not defined ReferenceError: flyer is not defined
at model (http://localhost:4200/assets/flyer-creator.js:338:38)
at EmberObject.default.extend.deserialize (http://localhost:4200/assets/vendor.js:32872:19)
at applyHook (http://localhost:4200/assets/vendor.js:55667:32)
at Object.HandlerInfo.runSharedModelHook (http://localhost:4200/assets/vendor.js:53668:22)
at Object.subclass.getModel (http://localhost:4200/assets/vendor.js:53894:21)
at __exports__.bind (http://localhost:4200/assets/vendor.js:55536:19)
at tryCatch (http://localhost:4200/assets/vendor.js:55993:16)
at invokeCallback (http://localhost:4200/assets/vendor.js:56005:17)
at publish (http://localhost:4200/assets/vendor.js:55976:11)
at http://localhost:4200/assets/vendor.js:37026:7
Run Code Online (Sandbox Code Playgroud)
有没有办法访问从下一个属性的哈希返回的flyer属性?
Ember.RSVP.hash()最好避免编码实际的promise命令.当订单很重要时,您可以使用承诺链.
model: function(params) {
var self = this;
return this.store.find('flyer', params.flyer_id).then(function(flyer) {
return Ember.RSVP.hash({
flyer: flyer,
images: self.store.find('image', flyer.get('imagesID'))
});
});
},
Run Code Online (Sandbox Code Playgroud)
在您的特殊情况下,您使用route dynamic param params.flyer_id,因此更好的方法:
flyer模型钩子,images根据模型解析afterModel钩子.原因是当您将传单模型直接传递给路线{{link-to 'flyer' 'flyer' flyer}}或时,模型挂钩不会被触发transitionTo('flyer', flyer).
model: function(params) {
return this.store.find('flyer', params.flyer_id);
},
afterModel: function(flyer) {
var self = this;
// flyer is model already resolved
return this.store.find('image', flyer.get('imagesID')).then(function(images) {
var controller = self.controllerFor( self.get('controllerName') );
controller.set('images', images);
// or 2 steps:
// 1) self.set('images', images) here
// 2) implement setupController hook, it has controller as param
});
}
Run Code Online (Sandbox Code Playgroud)
PS如果flyer belongsTo image你可以使用诺言
flyer.get('image')
Run Code Online (Sandbox Code Playgroud)
代替
this.store.find('image', flyer.get('imageID'))
Run Code Online (Sandbox Code Playgroud)