触发Bestätigung_ÖFFNET等事件后SVG StateSignal13仍显示,visibility属性不生效如何解决
问题根因
- 变量未实时读取:你将两个状态变量的读取逻辑定义在函数外部,仅会在脚本初始化时执行一次,后续事件触发调用
ZustandLE1时,读取的始终是旧值,不会同步事件触发后的最新状态。 - 后序逻辑覆盖前序设置:两个独立的
if-else块顺序执行,后运行的LE1BS判断分支会直接覆盖前者设置的visibility属性,最终元素可见性仅和LE1BS的状态有关,完全不符合预期逻辑。 - 额外排查点:确认
getVariable返回的状态值确实为首字母大写的字符串"True",如果返回的是布尔值true或者小写字符串"true",全等判断会直接失效,也会导致逻辑走不到预期分支。
修复代码
function ZustandLE1(){ // 每次函数执行都读取最新的变量值 var LE1BO = LeitstandSCHENKERRadeburg.getVariable("Siemens LOGO 8 NR1.Bestätigung_ÖFFNET"); var LE1BS = LeitstandSCHENKERRadeburg.getVariable("Siemens LOGO 8 NR1.Bestätigung_SCHLIESSET"); // 合并逻辑:任意一个状态为True就显示元素,否则隐藏 if (LE1BO == "True" || LE1BS == "True") { LeitstandSCHENKERRadeburg.setProperty("LeitstandSCHENKERRadeburg.StateSignal13.visibility", "visible"); // 保留原有的ZustandLE1变量赋值逻辑 if(LE1BO == "True"){ LeitstandSCHENKERRadeburg.setVariable("Intern.ZustandLE1","True"); } if(LE1BS == "True"){ LeitstandSCHENKERRadeburg.setVariable("Intern.ZustandLE1","False"); } } else { LeitstandSCHENKERRadeburg.setProperty("LeitstandSCHENKERRadeburg.StateSignal13.visibility", "hidden"); } }
如果确认状态返回的是布尔值,把判断条件里的"True"改成true即可。
内容的提问来源于stack exchange,提问作者Rajmund Januszewski
相关产品推荐
相关产品推荐

