字段组件模型绑定(Solid)
Solid 包 @piying/view-solid 提供了 use-*Model 系列 Hook,用于将原生表单控件与 Piying-View 的 ControlValueAccessorAdapter(CVAA)绑定。这些 Hook 返回 createMemo 计算信号,使用时需调用 () 展开。
与 React 的差异: Solid 版本的
use-*Model均返回createMemo结果,需调用();且compositionMode参数为函数() => boolean。React 版本返回普通对象、compositionMode为布尔值,详见 React 版本。
前置:获取 CVAA
Section titled “前置:获取 CVAA”所有 use-*Model Hook 都接收一个 cvaa(ControlValueAccessorAdapter)作为第一个参数。通过 useControlValueAccessor() 获取:
文本输入 — useInputTextModel
Section titled “文本输入 — useInputTextModel”useInputTextModel(cvaa, compositionMode) 接收两个参数:
| 参数 | 类型 | 说明 |
|---|---|---|
cvaa |
CVAA | 控件值访问适配器 |
compositionMode |
() => boolean |
是否启用输入法组合模式(函数形式) |
返回 createMemo 信号,调用 () 得到属性:value、disabled、onBlur、onInput(组合模式下额外提供 onCompositionStart / onCompositionEnd)。
复选框 — useInputCheckboxModel
Section titled “复选框 — useInputCheckboxModel”返回属性:checked、disabled、onBlur、onChange。
数字输入 — useInputNumberModel
Section titled “数字输入 — useInputNumberModel”返回属性:value、disabled、onBlur、onInput。空值时转换为 undefined,非空时 parseFloat 转数字。
单选按钮 — useInputRadioModel
Section titled “单选按钮 — useInputRadioModel”useInputRadioModel(cvaa, value) 接收第二个参数 value,表示当前选项的值。返回属性:value、checked(根据当前值自动判断)、disabled、onBlur、onChange。
范围滑块 — useInputRangeModel
Section titled “范围滑块 — useInputRangeModel”返回属性:value、disabled、onBlur、onInput、onChange。空值时转换为 undefined,非空时 parseFloat 转数字。
下拉选择 — useSelectModel
Section titled “下拉选择 — useSelectModel”useSelectModel(cvaa, multiple) 接收第二个参数 multiple 控制单选/多选:
| 参数 | 类型 | 说明 |
|---|---|---|
multiple |
boolean |
false 单选,true 多选 |
单选时 onChange 写入 selected[0],多选时写入整个选中数组。
完整示例:文本输入
Section titled “完整示例:文本输入”Hook 汇总
Section titled “Hook 汇总”| Hook | 目标控件 | 关键返回属性 | 额外参数 |
|---|---|---|---|
useInputTextModel |
<input type=text> |
value / onInput / onBlur |
compositionMode |
useInputCheckboxModel |
<input type=checkbox> |
checked / onChange |
— |
useInputNumberModel |
<input type=number> |
value / onInput |
— |
useInputRadioModel |
<input type=radio> |
value / checked / onChange |
选项 value |
useInputRangeModel |
<input type=range> |
value / onInput / onChange |
— |
useSelectModel |
<select> |
value / onChange |
multiple |
所有 Solid 版本的 Hook 返回
createMemo,需调用()获取属性对象。