Skip to content
导航栏

Switch 控件

问题

比如,在模型中有字段的配置如下,你会发现,如果使用提mysql数据库,这个控件是无法使用的。

json
{
  "name": "online",
  "label": "是否在线",
  "type": "boolean",
  "default": false,
  "index": true
}

WHY

  • 在使用sqlite3作为数据库时,Switch控件的值需要设置成true/false

sqlite 作为数据库时,golang中的sqlite3驱动会自动作数据转换。数据库表的字段数据类型是boolean,在数据库表里保存的数据是01。更新数据时在 sql语句中却需要使用 true,与 false 来更新数据。而数据从数据库中读取出来后会自动转换成 truefalse.

  • 在使用 mysql 作为数据库时,Switch控件的值需要设置成1/0

在使用 mysql 作为数据库源时,model 中字段为 boolean 类型的字段生成的 mysql 数据库字段类型是 tinyint(1)。数据的保存与读取不会自动的转换,0/1

Switch控件默认的值是falsetrue

如果在tab.json中定义字段中使用默认的字段绑定显示设置,即是在fields.table中不显式的定义控件属性,这时框架会自动生成字段定义,这个生成的定义只适用于 sqlite3 数据库。如果切换成 mysql 的数据后,显示就会异常。差不多也算是一个 bug。

解决方法

解决方法是,如果是使用的mysql数据库,在fields.table中替换显式的定义控件属性,checkedValue=1unCheckedValue=0

使用 MYSQL 数据库时的配置:

json
{
  "是否在线": {
    "bind": "online",
    "view": {
      "type": "Switch",
      "props": {
        "checkedChildren": "",
        "checkedValue": 1,
        "unCheckedChildren": "",
        "unCheckedValue": 0
      }
    }
  }
}

使用SQLITE数据库时的配置:

json
{
  "是否在线": {
    "bind": "online",
    "view": {
      "type": "Switch",
      "props": {
        "checkedChildren": "",
        "checkedValue": true,
        "unCheckedChildren": "",
        "unCheckedValue": false
      }
    }
  }
}