Làm thế nào để bạn kiểm tra nếu một tài sản không được xác định trong qml?


14

Làm thế nào để bạn kiểm tra nếu một tài sản không được xác định trong qml?

Đây là những gì tôi đang cố gắng làm:

Button {
    id: myButton
    text: if (text === "undefined"){"default text"}
}

Câu trả lời:


12

Thử: text: text ? text : "default text"

"undefined"chỉ là một đại diện chuỗi của một tham chiếu không tham chiếu bất cứ điều gì, giống như None, hoặc NULLtrong các ngôn ngữ khác.

===là toán tử so sánh nghiêm ngặt, bạn có thể muốn đọc chủ đề này: /programming/523643/difference-b between-and-in-javascript


Đó là một giải pháp rất thông minh. Cảm ơn. Chỉ để giải thích cho bất cứ ai khác; kiểu như nói (sửa tôi nếu tôi sai) if (text === text) {text} other {"default text"}
Akiva

2
if (text) { text } else {"default text"}chinh xac. if (object)đánh giá thành sai nếu objectkhông xác định. Tương tự hack theo kiểu C nếu (con trỏ) ước lượng thành false nếu con trỏ có giá trị 0 (NULL). Cần lưu ý rằng textbiến được sử dụng cho thuộc tính văn bản của một nút được lấy từ phạm vi bên ngoài. Nó sẽ rõ ràng hơn nhiều với : text: inText ? inText : "default text", hoặcif(inText) { text } else {"default text"}
Kissiel

Xin lỗi để được daft, nhưng đây là điều tôi chưa bao giờ hiểu rõ. Theo logic, về mặt kỹ thuật nó sẽ đọc như thế này -if (text is true) then {text = text} else {text = "default text"} - điều này có chính xác không?
Akiva

2
Bạn khá nhiều đúng không. Điều không trực quan duy nhất về mã giả này là if (text is true). Tôi thấy dễ dàng hơn để nghĩ là if (text *is*)hay if (text exists). Một nguồn tốt khác: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
mẹo

1
Điều này sẽ thất bại với text = "" (chuỗi trống), if sẽ trả về false
RvdK

5
import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: text ? text : "default text"
}

Câu trả lời này đưa ra một cảnh báo cho tôi.

QML Button: Binding loop detected for property "text"

Thay đổi textđể modelTextthay vào đó ném một lỗi.

ReferenceError: modelText is not defined

Điều này dừng thực thi Javascript cho tôi; tức là dòng tiếp theo không được gọi.

Qua Javascript

Điều tương tự cũng xảy ra khi cài đặt nó qua Javascript, nhưng khá dài dòng.

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

Sử dụng typeof

Các typeof câm khai thác lỗi và các công trình như mong đợi.

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

Để so sánh với không xác định bạn viết text === undefined . Điều này sẽ đánh giá thành sai nếu textnull.

Nếu bạn muốn kiểm tra xem giá trị có hiện diện hay không (nghĩa là kiểm tra cả hai undefinednull), sử dụng nó làm điều kiện trong câu lệnh if hoặc toán tử ternary. Nếu bạn cần lưu trữ kết quả so sánh dưới dạng giá trị boolean, hãy sử dụng var textPresent = !!text(mặc dù gấp đôi !có thể gây nhầm lẫn cho một người đọc mã).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.