本文介绍了QML条件绑定未按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个简单的Binding对象,格式为:

Rectangle {
    height: 400
    width: 500

    property var someObj: null

    Binding on color {
        when:  someObj
        value: someObj.color
    }
}

然后,我预计当someObj不是null时,someObjcolor属性将绑定到此对象的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。但是,在使用Rectangleid修复此问题后,尽管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条件绑定未按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-16 11:22