有几个选项可以使这个可选操作代码更整洁 - 使用 getter、use tryInvoke
、使用帮助器或编写装饰器。
使用 getter 是普通的 JavaScript,对于阅读代码的其他人来说可能最容易理解:
import Component from '@glimmer/component';
import { action } from '@ember/object';
export default class MyComponent extends Component {
get validate() {
return this.args.validate || function() {};
}
@action
someOtherAction() {
this.validate()
}
}
tryInvoke
是一个 Ember API 方法,用于在调用函数之前检查函数是否存在。缺点是当其他人在代码中搜索该函数的使用时,他们的搜索可能找不到它:
tryInvoke(this.args, 'validate');
您可以安装或创建自己的optional
助手。ember -composable-helpers插件有一个optional
助手。在模板中像这样使用它。
{{action (optional @validate) someArg}}
最后,您可以编写自己的装饰器并将其命名为@argumentFallback
,然后使用它来标记组件应使用的默认值(如果没有为组件提供参数)。
感谢bendenboski 和 theroncross 提供的信息!