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中加载额外的数据,就路由器而言就太迟了,它的过渡生命周期已经完成。因此,您必须手动执行此工作。