Ember.js 您可以使用emberjs提供延迟服务吗?

Ember.js 您可以使用emberjs提供延迟服务吗?,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我正在尝试使用Ember CLI从一个似乎不适合使用Ember数据的遗留API加载数据。这些数据通常会在页面加载时加载,然后在整个应用程序的许多地方重用。我已为此创建了一个服务“遗留_数据”: import Ember from 'ember'; export default Ember.Service.extend({ ready: null, legacy_data: null, init(){ this.ready = Ember.$.ajax( ... ).done

我正在尝试使用Ember CLI从一个似乎不适合使用Ember数据的遗留API加载数据。这些数据通常会在页面加载时加载,然后在整个应用程序的许多地方重用。我已为此创建了一个服务“遗留_数据”:

import Ember from 'ember';

export default Ember.Service.extend({
  ready: null,
  legacy_data: null,

  init(){
   this.ready = Ember.$.ajax( ... ).done(function(legacy_data){
     this.set('legacy_data', legacy_data);
  }

  computed_attr: Ember.computed('legacy_data', function(){ ... },

  ...more functions and computed attributes
});
因为“init”函数似乎不支持返回承诺(就像路由上的模型钩子一样),所以每当我想使用此服务时,我都必须这样做:

injected_service.ready.then(function(legacy_data){
 ... use service
});
实际上,这意味着我在代码库中有一大堆额外的承诺处理——这感觉就像我在逆流而上

有更好的方法吗?也许是一个生命周期钩子或一个支持延迟服务初始化的工厂/初始值设定项,这样我就不必在代码库的其他地方担心它了?初始化者支持这一点吗?我没有在任何例子中看到它。是否有其他解决此问题的方法?(余烬数据必须以某种方式处理相同的问题,但我对该框架不熟悉,因此我不确定)


谢谢您的帮助。

我认为您应该将代码从
init
钩子移动到函数
loadData
(或您喜欢的任何名称),然后从应用程序路径的
beforeModel
调用此函数。这将确保始终加载数据。

我认为您应该将代码从
init
钩子移动到函数
loadData
(或您喜欢的任何名称),然后从应用程序路径的
beforeModel
调用此函数。这将确保始终加载数据。

在余烬中,路由具有钩子,例如
前模式
模式
后模式
。如果您从这些钩子返回承诺,则承诺处理由Ember完成

顺便说一下,即使您使用的是余烬数据,调用
store
也应该通过路由完成。如果访问组件中的存储,同样需要处理承诺


但是,您正在询问一种方法,将申请推迟到承诺得到解决。这可以通过
applicationroute
s
beforeModel
hook来实现。(我需要它来检索客户端应用程序中的用户权限。由于我无法将权限承诺处理放在我的所有路由中,所以我将其放在我的
应用程序路由中
)因此,请看一看。

在余烬中,路由具有钩子,例如
beforeModel
model
afterModel
。如果您从这些钩子返回承诺,则承诺处理由Ember完成

顺便说一下,即使您使用的是余烬数据,调用
store
也应该通过路由完成。如果访问组件中的存储,同样需要处理承诺

但是,您正在询问一种方法,将申请推迟到承诺得到解决。这可以通过
applicationroute
s
beforeModel
hook来实现。(我需要它来检索客户端应用程序中的用户权限。由于我无法将权限承诺处理放在我的所有路由中,因此我将其放在我的
应用程序路由中
)因此,请查看