toggle组件为啥只有click才会触发回调事件?

1.当我有一个toggleGroup的时候,我所有toggle都是unCheck状态,但是进入场景的时候会默认checked第一个,但是又没有触发回调事件,我去看了源码,有个toggle函数里面是调用了回调函数的,但是toggle函数只有发生click事件的时候才会调用,就算在代码里手动调用isChecked = true或者toggle.check()方法都没有去调用这个toggle函数,导致不能触发回调,我想知道这是正常的吗?如果是正常的,官方是出于什么考虑呢?还是说需要自己手动调用toggle方法?

2.还有文档说有三个参数,但是我回调函数里如果不传自定义数据的话,arguments.length = 1, 如果传了自定义参数,arguments.length = 2,所以应该没有EventCustom参数吧?还有就是源码

3.toggle函数里调用_emitToggleEvents里是传了一个event参数的,但是_emitToggleEvents里并没有用到这个参数,这里是写错了还是JS的某种语法或者creator设计好了的?

顶,官方大神帮忙看看啊:slightly_smiling: @jare @zilong

这个应该是文档有误。。。 目前如果没有 customEventData 则参数只有一个,传了 customEventData 则传递的参数有 2 个。

可是为啥只有click事件才能触发toggle的回调啊?我觉得只要checked了就应该触发回调啊

顶一下,各位大神帮忙看看啊

子龙大大,你只回答了我第二个问题啊,我的主要问题是第一个啊

第一次初始化不会触发事件啊。。。后面调用 check 函数或者点击都会发事件吧?

check函数只触发了node.on添加的事件啊,没有触发component.eventHandler里面的事件啊,而且我觉得初始化也应该触发check事件吧,因为每次都是check第一个toggle,我又不能保证toggle的添加顺序吧好像?那我怎么知道初始化check的是哪个呢?还有就是万一我不小心两个toggle都勾选了isChecked,引擎会帮我去掉其中一个,那我怎么知道最后是哪个toggle被checked啊?

只有这个函数触发了两个回调,但是这个函数只在toggle里调用了,toggle函数的触发条件就是发生click事件

还是说是我没有理解到?或者漏掉了哪里?

哦,明白你的意思了。 如果手动调用 check 和 uncheck 也应该触发 component.eventHandler 里面的回调。

这个可以加上。

因为 toggle 默认只能同时允许一个处于选中状态,如果你在编辑器里面选中了两个,最后运行起来的时候,只会有一个处于选中状态。而且在第一次运行的时候,是不会触发任何事件的。

就是这里啊,toggle的添加顺序怎么保证?我怎么知道初始化选中的toggle是哪个?源代码是默认选中下标0的toggle

下面这个我手动保证吧
而且我选中了两个,运行起来的时候,只有一个会处于选中状态,但是问题来了,我怎么知道处于选中状态的toggle是哪个?

所以你在设计阶段的时候不要选中两个啊。。。 你选中两个本来就是设计的错误。。。默认是选中 toggleGroup 的第一个孩子。

第一个孩子是第一个添加toggleGroup的toggle组件吗?还是运行的时候第一个执行onEnable的toggle?那么如果我后期修改把这个组件所在的节点删除了,或者组件禁用了,那第一个是哪个啊:smile: 是按照执行onEnable的次序来决定的吗?(我只是希望引擎能告诉我默认的是哪个toggle)

默认就是第一个 没有 disable 的 toggle 组件,这里的第一个指的是 toggleGroup 的第一个孩子。

如果你想知道,你可以遍历一下。。 因为你设计阶段弄了两个,运行的时候就要付出一点代价。

建议: 在设计的时候只注册一个 toggle 为 check 状态。 或者 toggleGroup 可以提供一个接口,返回选中的 toggle 组件。

不过 toggleGroup 允许所有的 toggle 都可以处于未选中状态,那这个返回选中的 toggle 的接口可能返回 null。。。

不是,大大,选中两个只是我假设的情况,我也知道可以手动指定指定一个toggle为选中,我担心的是我用一个变量设置了默认值,然后选中了相应toggle,然后后期我如果修改了其中一个,有可能忘了修改另一个,如果默认check的时候就触发回调事件,就不会有这样的情况发送,可能是我想多了:joy:多谢你耐心的解答

你手动指定一个 toggle 为选中状态的时候,其他在设计阶段为 check 状态的 toggle 全部会变成 unchecked。

这样就只会存在你设置的 toggle 为选中状态。所以不会有问题,如果有问题,请提供 test demo。。。

没问题了,多谢,浪费你那么多时间:joy:

:smile: It’s OK. 你也帮助我发现了 bug,不是么? :+1:

:joy:只要你没嫌我烦就 its OK