Jam*_*esG 3 ajax promise ember.js rsvp.js
我有一个Ember应用程序,而不是使用Ember Data,使用我们自己的自定义AJAX数据层来与API通信.
我们可以使用RSVP一次加载两个模型 - 一个是Project通过我们的API包装器的对象,第二个是表示登录用户的对象.两者都传递到控制器和模板,工作得很好.
但我需要根据返回Project对象中的值加载第二个模型.
一旦我在我的路线中装载了这样的模型......
App.ProjectUpdateRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('model', model);
},
model: function(params) {
return Ember.RSVP.hash({
// Load Project from API - /myapi/v1/Project/:ProjectID
Project : App.Project.create().findById(params.ProjectID),
// Load current user from local object
User : App.AuthUser,
});
},
});
Run Code Online (Sandbox Code Playgroud)
...我有一个Project(或更确切地说model.Project)具有各种属性的对象,包括拥有该项目的用户的ID.
现在,我想进行第二次API调用/myapi/v1/User/:UserID以获取用户的详细信息.
我尝试过的所有内容 - 包括App.User.create().findById(UserID)在路由setupController函数和控制器中添加更多调用- 都会产生正确的API调用,但它是异步的,因此Ember继续渲染页面而我无法显示API调用的结果页.
那么 - 如何以及在Ember结构中的哪个位置,我会根据第一个数据加载第二个模型?我如何让ember等待第二次AJAX调用的解决承诺?
UPDATE
我也尝试过使用afterModel:function()几乎我需要的东西 - 它在应用程序流程中的第二个API调用正确的位置,但我仍然需要将结果添加到我现有的model数组中:
afterModel: function(model, tranistion, params) {
// Returns the promise but doesn't update 'model'
return Ember.RSVP.hash({
ProjectOwner : App.User.create().findById(model.Project.UserID)
});
}
Run Code Online (Sandbox Code Playgroud)
链接承诺,Ember将采取最终结果(从模型钩子)
model: function(params) {
return Ember.RSVP.hash({
// Load Project from API - /myapi/v1/Project/:ProjectID
Project : App.Project.create().findById(params.ProjectID),
// Load current user from local object
User : App.AuthUser,
}).then(function(results){
return App.User.create().findById(results.Project.UserID).then(function(user){
results.projectUser = user;
return results;
});
});
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
974 次 |
| 最近记录: |