我想写一个Octane/Glimmer风格的组件,其中动作的传递是可选的。写这个的最好方法是什么?
例如,我希望组件的这两种用法都有效:
<MyComponent />
<MyComponent @validate={{action this.validate}} />
现在,我的组件类有很多代码,看起来像这样,在调用它之前检查一个操作是否被传入:
if (this.args.validate) {
this.args.validate()
}
这对于一个操作来说是可行的,但是如果我需要连续调用几个可选的方法,那就不行了。
1条答案
按热度按时间xkrw2x1b1#
有几个选项可以让这个可选的动作代码更简洁a-使用getter、使用
tryInvoke
、使用helper或者编写装饰器。使用getter是普通的JavaScript,对于阅读代码的其他人来说可能最容易理解:
tryInvoke
是一个Ember API方法,它在调用函数之前检查函数是否存在。缺点是当其他人在代码中搜索函数的用法时,他们的搜索可能找不到它:你可以安装或创建你自己的
optional
助手。ember-composable-helpers插件有一个optional
助手。在模板中使用它。最后,您可以编写自己的装饰器,并将其命名为
@argumentFallback
,然后使用它来标记组件应该使用的默认值(如果没有为组件提供参数)。感谢bendemboski和theroncross提供的信息!