Как вы проверяете, не определено ли свойство в qml?

Как вы проверяете, не определено ли свойство в qml?

Это то, что я пытаюсь сделать:

Button {
    id: myButton
    text: if (text === "undefined"){"default text"}
}
1
задан 2 June 2016 в 15:44

2 ответа

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
ответ дан 24 May 2018 в 03:26

Для сравнения с undefined вы пишете text === undefined. Это будет оцениваться как false, если text равно null.

Если вы хотите проверить, присутствует ли значение (т. Е. Проверить как undefined, так и null), используйте его как условие if оператора или тройного оператора. Если вам нужно сохранить результат сравнения как логическое значение, используйте var textPresent = !!text (хотя double ! может показаться запутанным для одного чтения кода).

1
ответ дан 24 May 2018 в 03:26

Другие вопросы по тегам:

Похожие вопросы: