获取提供给Ember`action`帮助器的函数的名称

时间:2016-03-22 19:56:28

标签: ember.js

我认为这是不可能的,但想知道是否有人知道更好。

使用ES6,您可以获取功能的名称。例如:

function foo() { return true; }
function bar() { return true; }

const functionContainer = foo;

foo.name; // 'foo'
bar.name; // 'bar'
functionContainer.name; // 'foo'

在Ember中,您可以将动作传递给动作助手。例如:

export default Ember.Component.extend({
  actions: {
    bar() {
      return true;
    }
  }
});

模板:

{{foo-component foo=(action "bar")}}

foo-component内,有没有办法做到这一点:

export default Ember.Component.extend({
  doFoo: Ember.on('didRecieveAttrs', function() {
    console.log(this.attrs.foo.name); // 'bar'
  })
});

当我尝试时,我只得到一个空白的字符串。这是有道理的,因为看起来bar动作被ember-metal包裹在无名函数中。

任何人都知道如何抓住这个名字?这对我正在进行的项目会产生巨大的影响。

1 个答案:

答案 0 :(得分:1)

不,你不能做你想要的<在这里插入关于闭包的技术讨论>,但你可以通过向组件中添加另一个参数来伪装它,如下所示:

{handle:[function: aF]} or {handle:[function]}

然后在你的component.js中你可以访问

{{foo-component foo=(action "bar") actionName="bar"}}