js对象都是类似指针引用方式,赋值只需要对变量引用赋值即可改变原对象内容!典型如getAttrObject()返回对象引用,直接修改即可无需set回写;代码设置用户数据会影响当下json序列化结构

ht.Data/ht.Node,都是可以setImage()设置图片的,而一旦图标symbol做了数据绑定,那么变量就自动加到该图元节点的用户数据相当于自动调用了setAttrObject()。

所以,不要对图元对象setAttrObject随意直接赋值,非要这么做也需要先getAttrObject()获取原先的对象值后,针对性字段修改或者添加后的结果,再设置进去,否则会导致原数据被覆盖掉!!

并且注意以下3点:

  1. 对象的赋值跟json还不一样,对象不论key在不在,都可以obj.newKey = 'newValue',或者obj['newKey'] = 'newValue'这两种方式赋值!
  1. js对象都是引用类似指针的方式,这里getAttrObject()获取的也是对象引用,所以直接进行赋值追加key-value后就改变了原来对象的内容,无需自己再去调用一下setAttrObject()
  1. 图元节点用setAttrObject方法设置的用户数据变量比较特殊,会体现在图元在图纸序列化json结构的a属性内,跟图元节点通过setImage设置的图标数据绑定暴露的变量在一块。

针对第3点,补充一下,图标数据绑定暴露的变量除了在图元节点的json结构属性中体现,也会直接体现到编辑器的属性配置界面上,而setAttrObject设置的用户数据变量在编辑器中无法看到对应的属性配置只有看数据json才能看到!

如果代码有对某个图元通过getAttrObject()引用或者直接调用setAttrObject()赋值,那么编辑器中手动修改数据会发现通常无法修改会被自动还原(取决于代码的触发条件),简言之只要调用用户数据赋值,就会影响到json结构序列化,当然其他任何属性的代码赋值都会影响到序列化json内容!

 

 

需要重点关注的就是设置用户数据后,会即时影响到图纸序列化的json内容,当不保存图纸时,那么新增加的用户数据,每次都是程序运行到设置attrObject的时候才会运行时动态追加!

如果ctrl+s保存了图纸,那么追加的这个用户数据就会被永久json序列化,从而导致初始化加载图纸的时候有了初始值!至于这个初始值是否会造成影响,就要看前后文代码逻辑,可能会出现非常诡异的问题,运行好好的,只要保存、重新加载就会报错之类!

一般情况下程序想通过setAttrObject给图元设置用户数据属性变量,是程序运行时需要,只在内存中,但是如果该代码在编辑器编辑状态也会被执行到,那么会导致编辑状态一旦保存图纸,那么会把本来内存中动态设置的数据,被永久序列化到json文件中了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOTOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值