คุณจะตรวจสอบว่าคุณสมบัติไม่ได้กำหนดใน qml ได้อย่างไร?
นี่คือสิ่งที่ฉันพยายามทำ:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
คุณจะตรวจสอบว่าคุณสมบัติไม่ได้กำหนดใน qml ได้อย่างไร?
นี่คือสิ่งที่ฉันพยายามทำ:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
คำตอบ:
ลอง:
text: text ? text : "default text"
"undefined"
เป็นเพียงการแสดงสตริงของการอ้างอิงที่ไม่ได้อ้างอิงอะไรเหมือนNone
หรือNULL
ในภาษาอื่น ๆ
===
เป็นตัวดำเนินการเปรียบเทียบที่เข้มงวดคุณอาจต้องการอ่านเธรดนี้: /programming/523643/difference-between-and-in-javascript
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"}
if (text is true) then {text = text} else {text = "default text"}
นี่ถูกต้องไหม?
if (text is true)
เกี่ยวกับเรื่องนี้หลอกรหัสคือ ผมพบว่ามันง่ายที่จะคิดว่าเป็นหรือif (text *is*)
if (text exists)
แหล่งข้อมูลอื่นที่ดี: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
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
(แม้ว่าสองครั้ง!
อาจดูสับสนเมื่ออ่านโค้ด)