如何检查qml中是否未定义属性?


Answers:


12

尝试: text: text ? text : "default text"

"undefined"只是引用的字符串表示形式,不引用任何内容,就像一样None,或NULL使用其他语言。

===是严格的比较运算符,您可能需要阅读以下主题:https : //stackoverflow.com/questions/523643/difference-between-and-in-javascript


那是一个非常聪明的解决方案。谢谢。只是向其他人解释;有点像说(如果我错了,请纠正我)如果(文本===文本){text} else {“默认文本”}
Akiva

2
if (text) { text } else {"default text"}确切地说。if (object)如果object未定义,则结果为false 。类似C语言的if(pointer)风格,如果指针的值为0(NULL),则评估为false。值得注意的是,text用于按钮的text属性的变量是从外部范围获取的。使用以下命令会更清楚:text: inText ? inText : "default text"if(inText) { text } else {"default text"}
Kissiel 2014年

抱歉,这很愚蠢,但这是我从未完全理解的事情。从逻辑上讲,从技术上来说,它应该是这样的if (text is true) then {text = text} else {text = "default text"}-是正确的吗?
Akiva

2
你说的很对。关于此伪代码,唯一不直观的是if (text is true)。我发现以if (text *is*)或来思考更容易if (text exists)。另一个很好的来源:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Kissiel

1
这将失败,并带有text =“”(空字符串),if将返回false
RvdK

5
import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: text ? text : "default text"
}

这个答案对我发出了警告。

QML Button: Binding loop detected for property "text"

更改textmodelText,而不是抛出一个错误。

ReferenceError: modelText is not defined

这对我来说停止了Javascript的执行;即不调用下一行。

通过Javascript

通过Javascript设置时也会发生同样的情况,但是非常冗长。

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

使用 typeof

typeof操作静音错误并工作正常。

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (typeof modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

3

要与未定义进行比较,请编写text === undefined。如果text为,则结果将为false null

如果要检查值是否存在(即检查undefinednull),则将其用作if语句或三元运算符中的条件。如果您需要将比较结果存储为布尔值,请使用var textPresent = !!text(尽管double !可能会使阅读代码的人感到困惑)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.