【问题标题】:Ember.js 2.x: Call a helper from another helperEmber.js 2.x:从另一个助手调用一个助手
【发布时间】:2016-03-14 16:29:53
【问题描述】:

我试图在我的ember.js 应用程序中从另一个助手调用助手,但无法弄清楚在 2.x 中如何做到这一点。作为参考,我将 Ember 2.4 与 Ember-CLI 一起使用。

在旧版本中,围绕该工作有几个答案;例如,下面的 sn-p 定义了一个 helper 变体,它试图发挥一些魔力,然后调用 Ember 的内置 component helper...

import Ember from 'ember';

export function magicComponent(params) {
    // ...
    // do some magic here
    // ...

    return Ember.Handlebars.helpers['component'].apply(this, args); // Oops!
}

export default Ember.Helper.helper(magicComponent);

...但是标有“糟糕!”的行是 TypeErroring,因为在 Ember 2.x 中 Ember.Handlebars.helpersundefined。求救。

有谁知道如何在最新的 Ember 版本中以编程方式调用帮助程序(或设置某种继承)?

[编辑] 为清楚起见,删除了对“Handlebars”的引用。

【问题讨论】:

  • Ember >= 1.10 使用 HTMLbars 而不是 Handlebars。有关编写助手的官方方法,请参见此处guides.emberjs.com/v2.4.0/templates/writing-helpers
  • 您有特定的用例需要这个吗?
  • @nem:我试图让问题本身与用例无关,因为它不会帮助那些想知道如何做这件事的未来谷歌人。不过,我自己也在探索其他选择,以防万一,虽然这有点超出了范围。
  • 当然,但我要问的原因是导入助手需要知道哪个助手,所以我们知道从哪里导入它。你已经澄清你想导入一个内置的帮助器,这是我要求的:)
  • 我明确表示我在问题中使用了 Ember 的 component 助手——不清楚吗?要求真实,而不是讽刺。

标签: javascript ember.js


【解决方案1】:

这是我所做的,将基于会话的日期格式和时区添加到ember-moment

import Ember from 'ember';

import MomentFormat from 'ember-moment/helpers/moment-format';

export default MomentFormat.extend({
    session: Ember.inject.service(),

    formatChanged: observer("session.timeZone", "session.dateFormat", function() {
        this.recompute();
    }),


    compute([date], { locale }) {
        const timeZone = this.get("session.timeZone");
        const format = this.get("session.dateFormat");
        return this._super([date, format], {locale, timeZone});
    }
});

所以基本上,包括你需要的助手,然后扩展它,并覆盖计算方法。

【讨论】:

  • Import & Extend 确实似乎是正确的答案,虽然我有点摸不着头脑,因为这对自定义助手很有用......但我最初的用例是弄清楚如何调用核心Ember 助手(例如“组件”或“链接到”)。对于实际问题,我的场景可能过于具体。
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2023-03-07
  • 2014-12-12
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多