คุณจะตรวจสอบว่าคุณสมบัติไม่ได้กำหนดใน 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;
}
}
}
typeoftypeofปิดปากประกอบข้อผิดพลาดและการทำงานตามที่คาดไว้
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เพื่อเปรียบเทียบกับไม่ได้กำหนดที่คุณเขียน นี้จะมีการประเมินเป็นเท็จถ้าเป็นtextnull
หากคุณต้องการตรวจสอบว่ามีค่า (เช่นตรวจสอบทั้งundefinedและnull) ใช้เป็นเงื่อนไขในถ้าคำสั่งหรือผู้ประกอบการประกอบไปด้วยสาม หากคุณต้องการเก็บผลลัพธ์ของการเปรียบเทียบเป็นค่าบูลีนให้ใช้var textPresent = !!text(แม้ว่าสองครั้ง!อาจดูสับสนเมื่ออ่านโค้ด)