यदि आप एक संपत्ति 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


यह एक बहुत ही चतुर समाधान था। धन्यवाद। बस किसी और को समझाने के लिए; इसकी तरह की कहावत (मुझे सही कहो तो मैं गलत हूँ) अगर (पाठ === पाठ) {पाठ} बाकी {"डिफ़ॉल्ट पाठ"}
अकिवा

2
if (text) { text } else {"default text"}सटीक होना। अपरिभाषित if (object)होने पर असत्य का मूल्यांकन करता objectहै। सी-स्टाइल के समान हैक यदि (पॉइंटर) जो गलत का मूल्यांकन करता है यदि पॉइंटर का मान 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"}- क्या यह सही है?
अकिव

2
तुम बहुत सही हो। इस छद्म कोड के बारे में केवल अनपेक्षित बात है if (text is true)। मैं यह आसान के रूप में सोचने के लिए लगता है if (text *is*)या if (text exists)। एक और अच्छा स्रोत: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
Kissiel

1
यह पाठ = "" (खाली स्ट्रिंग) के साथ विफल हो जाएगा, अगर गलत वापस आ जाएगा
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

यह मेरे लिए जावास्क्रिप्ट निष्पादन को रोकता है; यानी अगली पंक्ति नहीं है।

जावास्क्रिप्ट

एक ही ऐसा होता है जब इसे जावास्क्रिप्ट के माध्यम से सेट किया जाता है, लेकिन काफी क्रिया है।

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.