【问题标题】:emberJS: Is it possible to use helpers in Component/controller Javascript?emberJS:是否可以在组件/控制器 Javascript 中使用帮助程序?
【发布时间】:2017-11-20 12:45:05
【问题描述】:

如果我创建了一个助手,那么就可以直接在 HBS 文件中使用它。 但是我可以在控制器或组件的 JS 文件中使用它吗?

【问题讨论】:

    标签: javascript ember.js helpers


    【解决方案1】:

    是的。你可以。假设你有 format-css 助手,那么你可以像这样导入它 import { formatCss } from 'app-name/helpers/format-css'; 可以在 js 文件中使用它formatCss(['argument1'])

    【讨论】:

    • 非常有帮助,谢谢@Ember-Freak!我一直在寻找这个用例的解决方案。我正在添加我的用例,作为附加示例:将 SVG 内联到 ember 模板中,用于渲染到 Leaflet.js 地图中。使用的库:svg-jar 和 Leaflet.js import svgJar from 'your-app-name/helpers/svg-jar'; 然后 L.divIcon({ html: `<div> ${ svgJar.compute(["name-of-svg"], { class: "custom-icon-svg" }).string } </div>` });
    【解决方案2】:

    在 Ember 1.x 中,代替:

    export default Ember.Handlebars.makeBoundHelper(function(someArg){
      //do something
    });
    

    使用命名导出单独导出函数:

    //app_name/helpers/some-helper.js
    export function someFn(someArg) {
        //do something 
    }
    
    export default Ember.Handlebars.makeBoundHelper(someFn);
    

    这样,帮助器被正确定义为在模板中使用,但是在任何 js 文件中,您导入命名的帮助器函数(不是默认导出):

    import { someFn } from 'app_name/helpers/some-helper';
    someFn()
    

    在 2.16 中,从您看到的文档中他们推荐这样的导出(使用不同的机制来创建帮助器):

    import { helper } from "@ember/component/helper"
    
    export function formatCurrency([value, ...rest]) {
      let dollars = Math.floor(value / 100);
      let cents = value % 100;
      let sign = '$';
    
      if (cents.toString().length === 1) { cents = '0' + cents; }
      return `${sign}${dollars}.${cents}`;
    }
    
    export default helper(formatCurrency);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 2016-03-29
      • 2011-06-21
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 2019-06-14
      相关资源
      最近更新 更多