如果我有一个简单的Binding
形式的对象:
Rectangle {
height: 400
width: 500
property var someObj: null
Binding on color {
when: someObj
value: someObj.color
}
}
那么我期望当someObj
is not null
, someObj
's color
属性绑定到该对象的color
财产。我实际上得到的是运行时错误消息:
TypeError: Cannot read property 'color' of null
这不起作用的任何原因吗?
正在做的almost等效的 JavaScript 表达式:
color: {
if ( someObj != null ) {
return someObj.color;
} else {
return "black";
}
}
按预期工作。
如上所述在 BaCaRoZzo 的评论中,问题中给出的最小示例不起作用,因为它给出了ReferenceError: someObj is not defined
。然而,在用一个解决这个问题之后id
为了Rectangle
, then 尽管出现 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
要设置在value
的表达Binding
:
Binding on color {
when: rect.someObj
value: rect.someObj ? rect.someObj.color : undefined
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)