gpt4 book ai didi

ember.js - 如何对 Octane 组件进行可选操作?

转载 作者:行者123 更新时间:2023-12-02 05:55:41 25 4
gpt4 key购买 nike

我想编写一个 Octane/Glimmer 样式的组件,其中传入的操作是可选的。写这个的最好方法是什么?

例如,我希望组件的这两种用途都有效:

<MyComponent />
<MyComponent @validate={{action this.validate}} />

现在,我的组件类有很多这样的代码,在调用它之前检查是否传入了一个 Action :

if (this.args.validate) {
this.args.validate()
}

这对于一个操作来说很好,但如果我需要连续调用几个可选方法就不行了。还有哪些其他选择?

最佳答案

有几个选项可以使这个可选操作代码更整洁 - 使用 getter、使用 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 提供的信息!

关于ember.js - 如何对 Octane 组件进行可选操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com