You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Incisor中点击按钮时向回调函数传入自定义数据?

如何在Incisor中点击按钮时向回调函数传入自定义数据?

嘿,我之前也碰到过类似的问题,来给你唠唠怎么解决!

你现在遇到的问题,核心是Incisor框架的回调参数规则:当你给按钮添加点击回调时,框架默认会把MouseEvent对象作为第一个参数传给回调函数,而你手动传入的自定义数据,会排在这个事件参数的后面。所以你的回调函数只写了一个参数data的话,拿到的自然就是先传过来的事件对象啦。

给你两个实用的解决办法,挑顺手的用就行:

方法一:调整回调参数顺序(最直接)

只需要修改你的回调函数,先接收事件参数,再接收自定义数据,就能拿到你要的data了:

init() {
    let data = {"id": 0, "email": "test@email.test", "active": true};

    // 先定义回调函数,参数顺序改成 event 在前,data 在后
    this.myPressCallback = function( event, data ) {
        console.log('callback:', data ); // 现在这里就能正确拿到自定义数据了
    }

    this.button = new Button( nc.graphicAssets.WhiteBox, nc.mainScene, "MyButton" );
    this.button.addPressCallback( this, "myPressCallback", data );
}

顺便提一句,建议把回调函数的定义放在addPressCallback调用之前——虽然Incisor用字符串方法名查找的方式可能不会出问题,但这样写逻辑更清晰,也能避免一些潜在的小坑。

方法二:用闭包包裹回调(不想处理事件参数时用)

如果你不想在回调里处理事件对象,可以用闭包把自定义数据“包”在回调里,直接拿到目标数据:

init() {
    let data = {"id": 0, "email": "test@email.test", "active": true};

    this.button = new Button( nc.graphicAssets.WhiteBox, nc.mainScene, "MyButton" );
    
    // 用箭头函数包裹,自动绑定当前的 this 和 data
    this.button.addPressCallback( this, (event) => {
        this.myPressCallback(data);
    });

    this.myPressCallback = function( data ) {
        console.log('callback:', data );
    }
}

如果你的环境不支持箭头函数,也可以用普通函数加变量保存this:

const self = this;
this.button.addPressCallback( this, function(event) {
    self.myPressCallback(data);
});

这样调整之后,点击按钮时回调里就能正确获取到你传入的自定义数据啦!

备注:内容来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:33:02