使用 JSON 对象
JSON 对象及其他所有对象的行为均与信息表对象类似,它们均为复本。
例如:
以下代码将导致意外行为。如果其为持久化属性,那么它看似已设置,但实际上并不会持久保存更改。这与 ThingWorx 8.4 中表现出的行为相同。值的内存中版本已更改,但却无法正确保存。
me.jsonProp['key'] = 'newValue';
要正确使用 JSON 对象,可将 JSON 字符串分配给属性值:
me.jsonProp= {'key':'newValue'};
或创建一个属性副本并进行更新,然后将其分配回原始属性:
var json = me.jsonProp;
json['key'] = 'newValue';
me.jsonProp = json;
所有属性值都存储在缓存层中。JavaScript 中使用的对象仅为对象的包装,其会将一些写入操作处理回缓存,以帮助实现旧版支持。直接对象更新仅支持一个级别或包装。必须了解的是,每次分配都将把整个对象写回缓存,因此当需要进行多次更改时,应始终创建一个副本。
以下示例不起作用。json 对象为原始对象的包装,但 unit 为非包装子对象。因此,分配 .unit 不会将值写回缓存对象:
input.recurrent.unit = "MB"
可使用以下解决方法之一:
处理文档的子部件,然后将其分配回原位:
json = input.recurrent
json.unit = "MB";
input.recurrent = json <--- this does a cache update
如果必须更新 JSON 中的多个值,请始终复制整个对象并对其进行处理,然后再将其分配回原位以获得最佳性能。
json = JSON.parse(input);
json.recurrent.unit ="MB";
input = json <--- this does a cache update
应限制缓存写入以获得最佳性能。在单服务器模式下,它们的写入速度会非常快,但在高可用性群集模式下,系统会对缓存进行分布,因此每次写入都会对性能产生影响。
input.value = 5 <--- this does a cache update
input.text = "junk" <--- this does a cache update
这对您有帮助吗?