qmlでプロパティが未定義かどうかをどのように確認しますか?


14

qmlでプロパティが未定義かどうかをどのように確認しますか?

これは私がやろうとしていることです:

Button {
    id: myButton
    text: if (text === "undefined"){"default text"}
}

回答:


12

試してください: text: text ? text : "default text"

"undefined"は、のようにNone、またはNULL他の言語で、何も参照しない参照の単なる文字列表現です。

===厳密な比較演算子です。次のスレッドを読むことをお勧めします。https//stackoverflow.com/questions/523643/difference-between-and-in-javascript


それは非常に賢い解決策でした。ありがとう。誰かに説明するだけです。if(text === text){text} else {"default text"}
Akiva

2
if (text) { text } else {"default text"}正確に言うと。が未定義のif (object)場合、falseと評価されますobject。ポインターの値が0(NULL)である場合にfalseと評価されるCスタイルのif(pointer)と同様のハック。textボタンのテキストプロパティに使用される変数は、スコープ外から取得されることに注意してください。これは、とより明確になるでしょう:text: inText ? inText : "default text"、またはif(inText) { text } else {"default text"}
Kissiel

ふざけてすみませんが、これは私がまったく理解していなかったものです。論理的には、技術的にif (text is true) then {text = text} else {text = "default text"}はこのように読み取られます- これは正確ですか?
アキバ14

2
あなたはほぼ正しい。この擬似コードに関する直感的でない唯一のことはif (text is true)です。if (text *is*)またはとして考える方が簡単if (text exists)です。もう一つの良いソース:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Kissiel

1
これは、=「」(空の文字列)のテキストで失敗します、場合は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"

代わりにに変更textするとmodelText、エラーがスローされます。

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ですnull

値が存在するかどうかを確認する場合(つまり、との両方undefinedを確認する場合null)、ifステートメントまたは三項演算子の条件として使用します。比較の結果をブール値として保存する必要がある場合は、使用しますvar textPresent = !!text(ただし、double !はコードを読んでいる人にはわかりにくいかもしれません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.