ember-responsive,如果我在路由中使用 media: Ember.inject.service(),template.hbs 中的 {{media}} 是未定义的。为什么?

ember-responsive, {{media}} in template.hbs is undefined if I use media: Ember.inject.service() in route. Why?

我正在使用 https://github.com/freshbooks/ember-responsive

如果我在 routes/route 中使用 media: Ember.inject.service()

{{media}} in templates/route.hbs 是未定义的。 js.

如果我重新创建默认的 initializers/responsive.js 文件一切正常。

在路由中,它也适用于服务注入,仅使用此代码 in

activate() {
  console.log(this.get('media.isMobile'));
}

它相应地记录 true 或 false。

但是在template.hbs这个代码中:{{log media}}或者{{log media.classNames}}或者

{{#if media.isDesktop}}
  Desktop view!
{{/if}}

在我使用初始化程序而不是仅在此路由中注入服务之前,始终未定义或不显示任何内容。

为什么?

模板将仅通过控制器提取属性。如果您想要任何需要在模板中显示或使用的 属性,那么您必须在控制器文件中提及 属性(在您的情况下为 controllers/route.js)。尝试类似的东西,

media: Ember.inject.service() 在您的控制器中,您可以在模板中使用 media 服务。关于初始化程序,您可能也使用 application.inject('controller', 'media', 'service:media'); 注入了控制器,这就是为什么在这种情况下可以访问媒体服务的原因。