คุณจะตรวจสอบว่าคุณสมบัติไม่ได้กำหนดใน qml ได้อย่างไร?


14

คุณจะตรวจสอบว่าคุณสมบัติไม่ได้กำหนดใน qml ได้อย่างไร?

นี่คือสิ่งที่ฉันพยายามทำ:

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

คำตอบ:


12

ลอง: text: text ? text : "default text"

"undefined"เป็นเพียงการแสดงสตริงของการอ้างอิงที่ไม่ได้อ้างอิงอะไรเหมือนNoneหรือNULLในภาษาอื่น ๆ

===เป็นตัวดำเนินการเปรียบเทียบที่เข้มงวดคุณอาจต้องการอ่านเธรดนี้: /programming/523643/difference-between-and-in-javascript


นั่นเป็นทางออกที่ฉลาดมาก ขอบคุณ เพื่ออธิบายให้คนอื่นฟัง มันเหมือนกับว่าพูด (แก้ไขฉันถ้าฉันผิด) ถ้า (ข้อความ === ข้อความ) {text} else {"ข้อความเริ่มต้น"}
Akiva

2
if (text) { text } else {"default text"}จะแน่นอน if (object)หาค่าเป็น false ถ้าobjectไม่ได้กำหนด การแฮ็กคล้ายกับ C-style if (ตัวชี้) ที่ประเมินเป็นเท็จหากตัวชี้มีค่าเป็น 0 (NULL) เป็นที่น่าสังเกตว่าtextตัวแปรที่ใช้สำหรับคุณสมบัติข้อความของปุ่มนั้นนำมาจากขอบเขตภายนอก มันจะชัดเจนกว่าด้วย: text: inText ? inText : "default text"หรือif(inText) { text } else {"default text"}
Kissiel

ขออภัยที่จะบ้า แต่นี่เป็นสิ่งที่ฉันไม่เคยเข้าใจ ในทางตรรกะแล้วมันจะอ่านทางเทคนิคแบบนี้ - if (text is true) then {text = text} else {text = "default text"}นี่ถูกต้องไหม?
Akiva

2
คุณพูดถูก สิ่งเดียวที่ unintuitive if (text is true)เกี่ยวกับเรื่องนี้หลอกรหัสคือ ผมพบว่ามันง่ายที่จะคิดว่าเป็นหรือif (text *is*) if (text exists)แหล่งข้อมูลอื่นที่ดี: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
......

1
สิ่งนี้จะล้มเหลวด้วย text = "" (สตริงว่าง), 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เพื่อเปรียบเทียบกับไม่ได้กำหนดที่คุณเขียน นี้จะมีการประเมินเป็นเท็จถ้าเป็นtextnull

หากคุณต้องการตรวจสอบว่ามีค่า (เช่นตรวจสอบทั้งundefinedและnull) ใช้เป็นเงื่อนไขในถ้าคำสั่งหรือผู้ประกอบการประกอบไปด้วยสาม หากคุณต้องการเก็บผลลัพธ์ของการเปรียบเทียบเป็นค่าบูลีนให้ใช้var textPresent = !!text(แม้ว่าสองครั้ง!อาจดูสับสนเมื่ออ่านโค้ด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.