Ember.js 在REST请求完成后触发函数
设置应用程序路由器时,我向后端请求一些数据:Ember.js 在REST请求完成后触发函数,ember.js,Ember.js,设置应用程序路由器时,我向后端请求一些数据: App.Node = DS.Model.extend({ ... }); App.ApplicationRoute = Ember.Route.extend({ processReply: function ( ) { do some processing here; }, setupController: function (controller, model) { this.cache = App.Nod
App.Node = DS.Model.extend({
...
});
App.ApplicationRoute = Ember.Route.extend({
processReply: function ( ) { do some processing here; },
setupController: function (controller, model) {
this.cache = App.Node.find();
}
});
现在,当从后端接收到find
的结果时,我想通过调用this.processReply()
如何收听find
请求的完成情况?我已尝试插入。然后
方法(假设find
返回承诺),但这会阻止我的应用程序
setupController: function (controller, model) {
var _this = this;
this.cache = App.Node.find().then(function(data) {
_this.process();
});
}
setupController
与model
挂钩不同,它是同步的。然后,您可以从promise中延迟设置控制器的内容。因此,数据加载后,控制器中的绑定/计算属性将触发
setupController: function(controller, model) {
App.Node.find().then(function(data) {
controller.set('content', data);
// optionally
// controller.process()
});
}
setupController
与model
挂钩不同,它是同步的。然后,您可以从promise中延迟设置控制器的内容。因此,数据加载后,控制器中的绑定/计算属性将触发
setupController: function(controller, model) {
App.Node.find().then(function(data) {
controller.set('content', data);
// optionally
// controller.process()
});
}
你是对的,删除了我的答案,因为它不适用于你的用例你是对的,删除了我的答案,因为它不适用于你的用例谢谢Darshan,但我不明白。设置控制器的内容不是
find
的工作吗?与App.Node
对应的控制器不一定是我在setupController
中拥有的控制器。在我最初的实现中,我没有设置控制器的内容。为什么我在听然后时必须这样做?我希望能够钩住承诺的。然后,而不会对ember内部处理承诺的方式造成任何副作用,最终必须从我处理然后路由返回一个值(承诺?)。model()
是使用查找加载数据的钩子。路由器在find
返回承诺时执行此操作。调用setupController
时,假定您已经加载了模型,因此第二个参数model
。这正是默认的setupController所做的,controller.set('content',model)
。但是,如果您正在setupController中加载额外的数据,就路由器而言就太迟了,它的过渡生命周期已经完成。因此,您必须手动完成此工作。谢谢Darshan,但我不明白。设置控制器的内容不是find
的工作吗?与App.Node
对应的控制器不一定是我在setupController
中拥有的控制器。在我最初的实现中,我没有设置控制器的内容。为什么我在听然后时必须这样做?我希望能够钩住承诺的。然后,而不会对ember内部处理承诺的方式造成任何副作用,最终必须从我处理然后路由返回一个值(承诺?)。model()
是使用查找加载数据的钩子。路由器在find
返回承诺时执行此操作。调用setupController
时,假定您已经加载了模型,因此第二个参数model
。这正是默认的setupController所做的,controller.set('content',model)
。但是,如果您正在setupController中加载额外的数据,就路由器而言就太迟了,它的过渡生命周期已经完成。因此,您必须手动执行此工作。