droidscript 事件错误/错误

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

我有一个带有此代码的课程

class Widget {

  onstructor(v) {
        this.value = v
  }
  createFilledRange() {
            
        this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
          
        this.btn_plus.SetOnTouch(() => {
            app.ShowPopup(this.value)
        })
  }
        
}

...我像这样实例化该类

let termo = new Widget(20)
let shower = new Widget(40)

termo.createFilledRange())
shower.createFilledRange()

如果我只实例化一个项目,我就会遇到问题,但是当我使用两个对象执行此操作时,单击按钮的值总是给我第二个对象值。也就是说,无论我按哪个按钮,结果始终是 40。

另一方面,如果我这样设置事件,程序就可以完美运行

let termo = new Widget(20)
let shower = new Widget(40)

termo.createFilledRange()
termo.btn_plus.SetOnTouch(() => {
    app.ShowPopup(termo.value)
})
shower.createFilledRange()
shower.btn_plus.SetOnTouch(() => {
    app.ShowPopup(shower.value)
})

如何直接在班级上设置事件?

谢谢大家

javascript events scope droidscript
1个回答
0
投票

this
并不引用
Widget
SetOnTouch
的当前实例。没有足够的信息,不清楚
this
实际上指的是什么。

实例可能是全局范围的,返回最后一个实例。

要引用当前实例,您可以使用

function() {...}.bind(this)
或将实例存储在另一个变量中并使用该变量。

喜欢:

createFilledRange() {
    this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
    
    this.btn_plus.SetOnTouch(() => {
        app.ShowPopup(this.value)
    }.bind(this))
}

createFilledRange() {
    this.btn_plus = app.CreateButton("[fa-plus]", 0.1, 0.05, "FontAwesome")
    
    const that = this;

    this.btn_plus.SetOnTouch(() => {
        app.ShowPopup(that.value)
    })
}

© www.soinside.com 2019 - 2024. All rights reserved.