HarmonyOS 鸿蒙Next关于 Checkbox 等系列组件使用 $$ 双向绑定的问题

HarmonyOS 鸿蒙Next关于 Checkbox 等系列组件使用 $$ 双向绑定的问题

在最开始的时候,我们使用 Checkbox 的时候,为了标记是否选中,使用了类似下面的代码:

select(this.selectedContacts.some((c) => c.memberId === contact.memberId))

稍显冗余,列表渲染时间复杂度为 On2。

还好后边在 API10 后大量表单输入类组件支持了 $$数据双向绑定 ,这个特性在 TextArea 、 Toggle 这类组件上表现良好:因为 TextArea 等组件设置值是通过组件的构造函数传入属性的:

      TextArea({
        placeholder:'请输入消息内容',
        text: $$this.iptText
      })

$$this ,在 AST 检测上虽然找不到 binding,但是编辑器暂时没有报错,目前工作得很好。

但是在 CheckBox ,Radio 这类组件通过组件方法来设置值的可就惨了: 如果要在这类组件上使用 $$ 的特性,需要这样写:

                  Checkbox()
                    .select($$item.__selected)// 别慌,这可以运行。😁
                    .selectedColor($r('app.color.main_color'))
                    .unselectedColor($r('app.color.white'))
                    .width(16)
                    .height(16)

IDE上报错了,因为它找不到变量。但是不要慌,直接运行,是没问题的。

好了,帖子到这里就结束了。希望能给后续寻找 CheckBox,Radio 组件怎么使用$$双向绑定的开发者一点帮助。


后续的一点讨论:

但是这样的设计有点反直觉,希望可以统一成一个统一的双向 API:类似于:

CheckBox()
    .model(this.syncData) // 默认是 value,或者是 select,组件内部定义 defaultSyncField
    .model({key:'select',value:this.syncData}) // 或者类似这样 kv 的模式去指定。

另外,编辑器和编译器不统一的问题,确实是比较重要的问题,希望能尽快解决。

附:《ets和 deveco 是否支持全局 types》


更多关于HarmonyOS 鸿蒙Next关于 Checkbox 等系列组件使用 $$ 双向绑定的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next关于 Checkbox 等系列组件使用 $$ 双向绑定的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,关于Checkbox等系列组件使用$$双向绑定的问题,具体处理方式如下:

Checkbox等组件在鸿蒙系统中支持数据绑定机制,但$$符号并不是鸿蒙系统原生组件数据绑定的标准写法。鸿蒙系统通常使用特定的数据绑定语法来实现界面与数据模型的同步。

对于Checkbox组件,你可以通过@bind:checked属性(或其他类似属性,根据鸿蒙版本可能有所不同)来实现双向绑定。例如,你可以在组件的模板中这样定义Checkbox:

<Checkbox @bind:checked="isChecked" />

其中isChecked是你在ViewModel或Page中定义的一个布尔值属性,用于存储Checkbox的选中状态。当用户改变Checkbox的选中状态时,isChecked的值会自动更新。

确保你的ViewModel或Page中的属性是响应式的,这样当属性值改变时,界面会自动刷新。

如果你在使用双向绑定时遇到问题,可能是因为属性名、绑定语法或数据模型定义有误。请检查你的代码,确保所有相关部分都正确无误。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部