RW
RW
方法可以为目标对象创建一个代理,用于开启功能更强大的读写模式。我一般称它为高级读写领域。 在这个领域下,你可以调用我内置的一些读写语法。甚至,你还可以借助这个领域扩展出符合自己需求和喜好的语法。
特性
键名即引用
属性名可以从#
开始,这时使用引用执行本次读写,每层属性名之间使用/
分隔空指针预防措施
在引用中过程中,非末尾属性为undefined或null时,不会去抛出空指针异常, 而是会自动创建一个空容器,默认创建对象。但如果属性拥有$Array_
修饰符,则创建数组。修饰词钩子
在引用中过程中,属性名可以增加$[内置关键词]_
前缀修饰。 修饰词在语义上代表属性内值的特征,在执行上则包含了一系列数据处理。
尝试一下
语法
javascript
RW(target)['#/value']
RW(target)['#/$JSON_jsonStr/value']
RW(target)['#/$Array_arr/0/value']
RW(target)['#/$Array_arr/0'].value
RW(target)['#/$Array_arr/0']['#/value']
RW(target)['#/$Array_arr/$Item_value']
RW(target)['#/$Array_arr/$ItemString_value']
参数
target
需要创建代理的目标对象。
返回值
Proxy<object>RW()将返回一个Proxy代理,并且这个代理每次取值也会返回一个新的RW代理。
示例
解决了 ?.语法 不能被赋值的问题
常规方式
vue
<template>
<table>
<tr v-for="r_item in row">
<td v-for="cell in r_item">{{cell.value}}</td>
</tr>
</table>
<FormCell v-if="currentNode.children[0].props" v-model="currentNode.children[0].props.preset"></FormCell>
</template>
<script setup>
</script>
使用RW
vue
<FormCell v-model="RW(currentNode)['#/children/0/props/preset']"></FormCell>
解决了数据初始化繁琐的问题
vue
兼容性
由于使用Proxy对象,不支持IE浏览器,详细浏览器兼容性参考MDN Proxy 浏览器兼容性
vue3环境下
RW()代理本身无法在vue3
中被深度监听
,你需要尽量避免监听代理的情况。
如果必须,你可以尝试使用shallowRW()
参考
引用方式参考了JSON Schema 规范中使用$ref引用的部分。
函数设计参考了Excel常用函数 。