【BUG】Toggle的isChecked状态无法正常记录

  • Creator 版本:2.1.2

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:
    1.属性检查器中将isChecked设置为false;
    2.实现脚本,代码如下:
    `cc.Class({
    extends: cc.Component,

    properties: {
    checkBox: cc.Node,
    _isCheck: false
    },

    onLoad () {
    this._isCheck = cc.sys.localStorage.getItem(“is_check”) === “Y”;
    if (this._isCheck) {
    let toggle = this.checkBox.getComponent(cc.Toggle);
    if (toggle) {
    toggle.check();
    }
    }
    },

    checkBoxCB: function () {
    cc.log(“checkBoxCB()”);
    let toggle = this.checkBox.getComponent(cc.Toggle);
    if (toggle) {
    if(!this._isCheck){
    toggle.check();
    cc.log(“check()”);

      		this._isCheck = true;
              cc.sys.localStorage.setItem("is_check", "Y");
          }else{
              toggle.uncheck();
              cc.log("uncheck()");
      		
      		this._isCheck = false;
              cc.sys.localStorage.setItem("is_check", "N");
          }
      }
    

    },
    });
    `
    3.运行预览,勾选CheckBox,记录CheckBox状态到localStorage;
    4.刷新或关闭网页再次预览,会自动进入CheckBox回调2次,并把isChecked重置为false

  • 重现方式:详情见demo

Test.zip (193.2 KB)

checkBoxCB 不管是 check 还是 uncheck 都会执行的。

onLoad 代码改成这样就可以了

var toggle = this.checkBox.getComponent(cc.Toggle);
toggle.isChecked = cc.sys.localStorage.getItem("is_check") === "Y";

那是不是可以认为,应该尽量使用toggle.isChecked = bool 的方式去修改状态,而不要用那两个方法:sweat_smile:

最好是