HarmonyOS NodeController的onTouchEvent函数中无法获取到this?

使用了QueryImageNodeController继承自NodeController,QueryImageNodeController中维护了一个nodeArray,点击后onTouchEvent被回调,发生崩溃Cannot read property nodeArray of undefined,为什么获取不到this?如果获取不到this,无法在onTouchEvent完成点击后的一些操作。

阅读 545
1 个回答

参考demo:

export class QueryImageNodeController extends NodeController {
  private rootNode?: FrameNode
  private nodeArray: Array<ImageNode> = []
  queryImageTouchCallBack?: QueryImageTouchCallBack

  makeNode(uiContext: UIContext): FrameNode {
    this.rootNode = new FrameNode(uiContext)
    const rootRenderNode = this.rootNode.getRenderNode()
    if (rootRenderNode) {
      this.nodeArray.forEach((item) => {
        rootRenderNode.appendChild(item.renderNode)
      })
    }
    return this.rootNode
  }

  onTouchEvent?(event: TouchEvent): void {
    let that = this
    if (event.type === TouchType.Down) {
      if (event.touches.length > 0) {
        const lastTouch = event.touches[event.touches.length - 1]
        let x = lastTouch.x
        let y = lastTouch.y
        this.nodeArray.forEach((node, index) => { // this是undefined,无法获取到当前类的一些参数<---------
          let box = node.boxItem?.box
          if (!box) {
            return
          }
          if (x > box.x1 && x < box.x2 && y > box.y1 && y < box.y3) {
            that.queryImageTouchCallBack?.onRectTouch(node.boxItem?.questionIndex ?? 0)
          }
        })
      }
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进