Как Вы проверяете, не определено ли свойство в qml?
Это - то, что я пытаюсь сделать:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Попытка: text: text ? text : "default text"
"undefined"
просто строковое представление ссылки не ссылка на что-либо, точно так же, как None
, или NULL
на других языках.
===
строгий оператор сравнения, Вы могли бы хотеть считать этот поток: https://stackoverflow.com/questions/523643/difference-between-and-in-javascript
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, но является довольно подробным.
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;
}
}
}
Для сравнения неопределенному, Вы пишете text === undefined
. Это оценит ко лжи, если text
будет null
.
, Если Вы хотите проверку, если значение присутствует (т.е. проверка и на undefined
и на null
), используйте его в качестве условия в если оператор или тернарный оператор. Если необходимо сохранить результат сравнения как булево значение, используйте var textPresent = !!text
(хотя дважды !
мог бы казаться сбивающим с толку одно чтение кода).