Bir özelliğin qml'de tanımsız olup olmadığını nasıl kontrol edersiniz?


14

Bir özelliğin qml'de tanımsız olup olmadığını nasıl kontrol edersiniz?

Ben yapmaya çalışıyorum:

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

Yanıtlar:


12

Deneyin: text: text ? text : "default text"

"undefined"Bir referans tıpkı şey başvurmuyor sadece bir dize temsilidir Noneveya NULLdiğer dillerde.

===katı karşılaştırma operatörü ise, bu konuyu okumak isteyebilirsiniz: /programming/523643/difference-between-and-in-javascript


Bu çok zekice bir çözümdü. Teşekkürler. Sadece herkese açıklamak için; (text === text) {text} else {"varsayılan metin"} ise (yanlışsa beni düzelt) gibi
Akiva

2
if (text) { text } else {"default text"}tam olarak. undefined if (object)ise false olarak değerlendirir object. İşaretçi 0 (NULL) değerine sahipse false olarak değerlendirilen C stili if (pointer) ile benzer bir saldırı. textBir düğmenin text özelliği için kullanılan değişkenin dış kapsamdan alındığını belirtmek gerekir . text: inText ? inText : "default text"if(inText) { text } else {"default text"}
Şununla

Üzgün ​​olduğum için üzgünüm, ama bu hiç tam olarak anlamadığım bir şey. Mantıkta, teknik olarak şu şekilde okunur - if (text is true) then {text = text} else {text = "default text"}- bu doğru mu?
Akiva

2
Çok haklısın. Bu sözde kodla ilgili kasıtsız olan tek şey if (text is true). if (text *is*)Veya olarak düşünmeyi daha kolay buluyorum if (text exists). Başka bir iyi kaynak: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Kissiel

1
Bu, text = "" (boş dize) ile başarısız olur, if false döndürür
RvdK

5
import QtQuick 2.3
import QtQuick.Controls 1.2

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

Bu cevap benim için bir uyarı veriyor.

QML Button: Binding loop detected for property "text"

Değişen textiçin modelTextyerine hata verir.

ReferenceError: modelText is not defined

Bu benim için Javascript yürütülmesini durdurur; yani bir sonraki satır çağrılmaz.

Javascript ile

Javascript aracılığıyla ayarlanırken de aynı şey olur, ancak oldukça ayrıntılıdır.

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

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

kullanma typeof

typeofOperatör sesini kapatma hatası ve beklendiği gibi çalışır.

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

Undefined ile karşılaştırmak için yazıyorsunuz text === undefined. Bu false olarak değerlendirecektir textolduğunu null.

Değerin olup olmadığını kontrol etmek istiyorsanız (yani, ikisini de kontrol edin undefinedve nullif), if ifadesinde veya üçlü operatörde koşul olarak kullanın. Karşılaştırma sonucunu bir boolean değeri olarak saklamanız gerekiyorsa, kullanın var textPresent = !!text(yine de !, kod okunurken bir tanesi kafa karıştırıcı görünebilir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.