Как вы проверяете, не определено ли свойство в qml?
Это то, что я пытаюсь сделать:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
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 отключает ошибку и работает как ожидалось.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Для сравнения с undefined вы пишете text === undefined. Это будет оцениваться как false, если text равно null.
Если вы хотите проверить, присутствует ли значение (т. Е. Проверить как undefined, так и null), используйте его как условие if оператора или тройного оператора. Если вам нужно сохранить результат сравнения как логическое значение, используйте var textPresent = !!text (хотя double ! может показаться запутанным для одного чтения кода).