Як перевірити, чи властивість не визначено в qml?


Відповіді:


12

Спробуйте: text: text ? text : "default text"

"undefined"- це лише рядкове подання посилання, що не посилається ні на що, як-от Noneабо NULLна інших мовах.

===є суворим оператором порівняння, ви можете прочитати цю тему: /programming/523643/difference-between-and-in-javascript


Це було дуже розумне рішення. Спасибі. Просто пояснити комусь іншому; начебто сказати (виправте мене, якщо я помиляюся) if (text === text) {text} else {"текст за замовчуванням"}
Akiva

2
if (text) { text } else {"default text"}якщо бути точним. if (object)оцінює значення false, якщо він objectне визначений. Схожий на хак у стилі C, якщо (покажчик), який оцінює значення false, якщо покажчик має значення 0 (NULL). Варто зазначити, що textзмінна, яка використовується для властивості тексту кнопки, взята за межами області. Це буде набагато зрозуміліше з: text: inText ? inText : "default text"абоif(inText) { text } else {"default text"}
Кіссіель

Вибачте, що даф, але це те, що я ніколи не розумів. За логікою, це технічно було б прочитано так: if (text is true) then {text = text} else {text = "default text"}- це точно?
Аківа

2
Ви майже праві. Єдине неінтуїтивне в цьому псевдокоді if (text is true). Мені легше мислити як if (text *is*)чи if (text exists). Ще одне хороше джерело: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Kissiel

1
Це не вдасться з текстом = "" (порожній рядок), якщо if повернеться помилковим
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), використовуйте його як умову, якщо оператор або потрійний оператор. Якщо вам потрібно зберегти результат порівняння як булеве значення, використовуйте var textPresent = !!text(хоча подвійне !може здатися заплутаним для одного читання коду).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.