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

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

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

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

3 ответа

Попытка: text: text ? text : "default text"

"undefined" просто строковое представление ссылки не ссылка на что-либо, точно так же, как None, или NULL на других языках.

=== строгий оператор сравнения, Вы могли бы хотеть считать этот поток: https://stackoverflow.com/questions/523643/difference-between-and-in-javascript

12
ответ дан 23 November 2019 в 03:00
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;
        }
    }
}
5
ответ дан 23 November 2019 в 03:00

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

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

2
ответ дан 23 November 2019 в 03:00

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

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