当通过机器人框架运行验证时,我如何保证属于验证器所在类的属性是可变的?

问题描述 投票:0回答:1

我已经遇到过几次这样的问题,我想知道是否有什么办法可以缓解这个问题。

当使用瀑布对话框或对话框时,您可以将验证器添加到对话框中。这些验证器在你运行对话框的类中相关联。看起来是这样的。但在运行时,验证器似乎与它所在的类是分开的。

下面是一个例子。

 this.addDialog(new TextPrompt(SOME_PROMPT, this.validateSomething))
     .addDialog(new TextPrompt(SOME_PROMPT2, this.validateOtherthing))

假设你的类有一个属性

public mutableProperty1 = true;

而在验证器中

private async validateSomething(context) Promise<any> {
    if (something happens here) {
       this.mutableProperty1 = false
       return true
    }
    return false
}

但这并没有发生。当重试提示发生时,该属性从未被突变为预期的结果。 为什么会这样,我有什么办法可以让它按照预期的结果进行突变吗?

javascript typescript botframework this this-pointer
1个回答
1
投票

我相信这更多的是TypeScriptJavaScript的问题,而不是机器人的问题。我怀疑问题在于 this 函数中的关键字并不指向你认为的对象。每当你把一个函数作为一个值传递给你而不调用它时,通常最好的办法是 束缚 的功能,以确保 this 指的是包围类实例。

this.addDialog(new TextPrompt(SOME_PROMPT, this.validateSomething.bind(this)))
    .addDialog(new TextPrompt(SOME_PROMPT2, this.validateOtherthing.bind(this)))
© www.soinside.com 2019 - 2024. All rights reserved.