本文介绍了QML条件绑定未按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我有一个简单的Binding
对象,格式为:
Rectangle {
height: 400
width: 500
property var someObj: null
Binding on color {
when: someObj
value: someObj.color
}
}
然后,我预计当someObj
不是null
时,someObj
的color
属性将绑定到此对象的color
属性。我实际得到的是运行时错误消息:
TypeError: Cannot read property 'color' of null
这不起作用有什么原因吗?
执行几乎等于的JavaScript表达式:
color: {
if ( someObj != null ) {
return someObj.color;
} else {
return "black";
}
}
按预期工作。
推荐答案
如前所述in the comment by BaCaRoZzo,问题中给出的最小示例不起作用,因为它给出了一个ReferenceError: someObj is not defined
。但是,在使用Rectangle
的id
修复此问题后,尽管TypeError:
Rectangle {
id: rect
height: 400
width: 500
property var someObj: null
Binding on color {
when: rect.someObj
value: rect.someObj.color
}
}
这会在设置rect.someObj
时正确设置颜色,并包含color
属性。
TypeError
的原因是表达式rect.someObj.color
在创建Binding
时已经求值(参见QTBUG-22005)。因此,要防止TypeError
,只需检查rect.someObj
是否在Binding
:的value
表达式中设置 Binding on color {
when: rect.someObj
value: rect.someObj ? rect.someObj.color : undefined
}
这篇关于QML条件绑定未按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!