Le ven. 9 août 2024 à 01:56, Mike Trahearn <
miketrahe...@imagineuisoftware.com> a écrit :

> To Ulf’s point,
>
> You would indeed not be able to restore a previous value using text:
> fooObject?.title ?? text because it will have been overwritten whenever
> fooObject?.title yields a valid value.
> The most reasonable solution therefore is to use the Binding element which
> is designed to restore the previous/original binding or value of the
> binding target property whenever its “when” property is false.
> It isn’t the most concise but it is bomb-proof and explicit, and is fully
> aligned to your requirements.
>

OP doesn't want to restore the previous value, but keep the last "valid"
value. The behavior of `text: fooObject?.title ?? text` is fine for them.
The question is about making it a bit less hacky since that line doesn't
look trustworthy.

    Binding {
>         yourTextObject.text: fooObject.title // assuming title will be
> valid if fooObject !== null, if not the “when” property might need
> fooObject?.title
>         when: fooObject  // else it will be restored to being bound to
> the “defaultString" value
>     }
> }
>

While the above lacks the `restoreMode: Binding.RestoreNone` already
mentioned by Fabian, it will also trigger some warnings when fooObject is
null. The `fooObject.title` expression, although not applied, will be
evaluated even though `when` is false so this needs to be checked for.
`fooObject?.title ?? ""`

So the correct solution would be
            Binding {
                textObject.text: fooObject?.title ?? ""
                when: fooObject
                restoreMode: Binding.RestoreNone
            }
or
            Binding on text {
                value: fooObject?.title ?? ""
                when: fooObject
                restoreMode: Binding.RestoreNone
            }

If we want to follow the route suggested by Giuseppe, we could write a new
"NoUndefinedBinding" type like the following:

import QtQml

Binding {
    property var val // we need a new property because value has no NOTIFY
signal :(
    when: typeof val !== "undefined"
    value: val
    restoreMode: Binding.RestoreNone
}

Usage:
Text {
    NoUndefinedBinding on text { val: fooObject?.title }
}

But is that really better than the initial `text: fooObject?.title ?? text`
??

Regards,
Pierre-Yves
-- 
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to