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');
注入了控制器,这就是为什么在这种情况下可以访问媒体服务的原因。
我正在使用 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');
注入了控制器,这就是为什么在这种情况下可以访问媒体服务的原因。