引用rootURL / hbs中的任何绝对路径

泰坦尼克号的老虎

ember-cli生成的index.html文件包括以下行

<script src="{{rootURL}}assets/vendor.js"></script>

rootURL分别替换为from中的值environment.js(仅'/'在devolompent中)。

现在,我想在partial用于不同路线(也处于不同嵌套级别)的组件(实际上是仅与一起使用的模板)中包含一个图标,但是

<img src="{{rootURL}}assets/img/some_logo.svg">

只是不能解决问题-rootURL为空,如中定义的任何其他字符串一样environment.js

我想我可以创建一个类文件import ENV from '../config/environment'并进行定义rootURL: ENV.rootURL,但是肯定地ember并不希望我在要包含资产文件夹中任何内容的地方执行此操作,对吗?

马夫

选项1:reopen控制器/组件类

最简单的方法是向reopen所有控制器/组件添加属性。如果这样做,则可以rootURL在任何模板中使用,而无需其他更改。

import Ember from 'ember';
import ENV from '../config/environment'

Ember.Controller.reopen({
  rootUrl: ENV.rootURL,
});

Ember.Component.reopen({
  rootUrl: ENV.rootURL,
});

选项2:控制器/组件继承

如果您想限制更改的范围,则可以rootURL在基本控制器/组件中定义属性,例如application.js:

import ENV from '../config/environment'

export default Ember.Controller.extend({
  rootURL: ENV.rootURL,
});

然后在您的其他控制器/组件中,扩展该基类并将rootUrl在相应的模板中工作:

import ApplicationController from 'application';

export default ApplicationController.extend({
  // controller definition
});

选项3:控制器/组件混合

除了使用继承之外,您还可以将此功能混入要具有的每个Controller或Component中rootURL首先定义Mixin:

// mixins/with-root.js
import Ember from 'ember';
import ENV from '../config/environment';

export default Ember.Mixin.create({
  rootURL: ENV.rootURL,
});

在要rootURL在模板中使用的任何组件/控制器中使用Mixin

import Ember from 'ember';
import WithRootMixin from '../mixins/with-root';

export default Ember.Controller.extend(WithRootMixin, {
  // controller definition
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章