使用 ember-bootstrap 操作的正确方法
Correct way to use actions with ember-bootstrap
创建了一个新的 ember Octane 应用程序 (3.15) 并使用 ember-bootstrap。我正在使用这样的模式
<BsModalSimple
@open={{true}}
@title="Create new podcast"
@closeTitle="Cancel"
@submitTitle="Create"
@size="lg"
@closeButton={{false}}
@fade={{false}}
@backdrop={{true}}
@backdropClose={{false}}
@renderInPlace={{false}}
@onHidden={{action 'closeModal'}}
@position="center">
</BsModalSimple>
这有效,但我收到一条错误消息
Do not use action
as {{action ...}}. Instead, use the on
modifier
and fn
helper.
在这种情况下使用动作的正确方法是什么?我试过了,但没用
{{on 'hidden' this.closeModal}}
在 classic Ember 模型 (pre-octane) 中,{{action}}
助手用于将正确的 this
上下文绑定到 action/method 作为关闭操作传递。因此,当在任何 class 中调用闭包操作时,该操作将具有调用者的 this
上下文而不是被调用者。
为了更加可预测和明确,此上下文绑定已作为装饰器移动,@action 应该用于装饰您的 closeModal
方法,而不是使用 {{action}}
帮助程序模板。所以,你的代码可以是:
<!-- application.hbs -->
<BsModalSimple
@open={{true}}
@title="Create new podcast"
@closeTitle="Cancel"
@submitTitle="Create"
@size="lg"
@closeButton={{false}}
@fade={{false}}
@backdrop={{true}}
@backdropClose={{false}}
@renderInPlace={{false}}
@onHidden={{this.closeModal}}
@position="center">
</BsModalSimple>
// controllers/application.js
import Controller from "@ember/controller";
import { action } from "@ember/object";
export default class ApplicationController extends Controller {
@action
closeModal() {
// your implementation
}
}
请注意,错误是由 linter (ember-template-lint) 引发的,错误消息可以更明确地使用 @action 装饰器。
创建了一个新的 ember Octane 应用程序 (3.15) 并使用 ember-bootstrap。我正在使用这样的模式
<BsModalSimple
@open={{true}}
@title="Create new podcast"
@closeTitle="Cancel"
@submitTitle="Create"
@size="lg"
@closeButton={{false}}
@fade={{false}}
@backdrop={{true}}
@backdropClose={{false}}
@renderInPlace={{false}}
@onHidden={{action 'closeModal'}}
@position="center">
</BsModalSimple>
这有效,但我收到一条错误消息
Do not use
action
as {{action ...}}. Instead, use theon
modifier andfn
helper.
在这种情况下使用动作的正确方法是什么?我试过了,但没用
{{on 'hidden' this.closeModal}}
在 classic Ember 模型 (pre-octane) 中,{{action}}
助手用于将正确的 this
上下文绑定到 action/method 作为关闭操作传递。因此,当在任何 class 中调用闭包操作时,该操作将具有调用者的 this
上下文而不是被调用者。
为了更加可预测和明确,此上下文绑定已作为装饰器移动,@action 应该用于装饰您的 closeModal
方法,而不是使用 {{action}}
帮助程序模板。所以,你的代码可以是:
<!-- application.hbs -->
<BsModalSimple
@open={{true}}
@title="Create new podcast"
@closeTitle="Cancel"
@submitTitle="Create"
@size="lg"
@closeButton={{false}}
@fade={{false}}
@backdrop={{true}}
@backdropClose={{false}}
@renderInPlace={{false}}
@onHidden={{this.closeModal}}
@position="center">
</BsModalSimple>
// controllers/application.js
import Controller from "@ember/controller";
import { action } from "@ember/object";
export default class ApplicationController extends Controller {
@action
closeModal() {
// your implementation
}
}
请注意,错误是由 linter (ember-template-lint) 引发的,错误消息可以更明确地使用 @action 装饰器。