我认为这是不可能的,但想知道是否有人知道更好。
使用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
包裹在无名函数中。
任何人都知道如何抓住这个名字?这对我正在进行的项目会产生巨大的影响。
答案 0 :(得分:1)
不,你不能做你想要的<在这里插入关于闭包的技术讨论>,但你可以通过向组件中添加另一个参数来伪装它,如下所示:
{handle:[function: aF]} or {handle:[function]}
然后在你的component.js中你可以访问
{{foo-component foo=(action "bar") actionName="bar"}}