2016-04-03 9 views
0

Ich möchte eine QML-Bindung in einer wiederholten Komponente erstellen. Ich möchte den Wert eines der Elemente an eine Eigenschaft eines bekannten Objekts binden. Mein Problem ist, dass der Name der Eigenschaft, an die ich binden möchte, als String in der Komponente zur Verfügung gestellt wird. Wie kann ich den Eigenschaftsnamen in eine tatsächliche Eigenschaft auflösen, die als Wert in einer Bindung verwendet werden kann?Eigenschaft des QML-Zugriffsobjekts nach Eigenschaftsname string

PS. Wenn möglich, könnte ich die Eigenschaft direkt an den Repeater übergeben, aber dann würde ich gerne die Eigenschaft in eine Zeichenkette umwandeln können, weil ich beides brauche und nicht beide weitergeben möchte.

EDIT: Hier ist, was ich will:

ListModel { 
     id: settingsModel 
     ListElement { title: "Bed Width"; setting: "bedWidth"; } 
     ListElement { title: "Bed Length"; setting: "bedLength"; } 
    } 

    Component { 
     id: settingsDelegate 

     Item { 
      width: parent.width 
      height: childrenRect.height 

      Label { 
       id: setLabel 
       text: title + ":" 
       width: parent.width 
      } 

      TextBox { 
       id: setTBox 
       anchors.top: setLabel.bottom 
       anchors.topMargin: 5 
       width: parent.width 

       Binding on text { 
        when: !setTBox.isActive 
        value: settings.setting 
       } 

       Binding { 
        target: settings 
        property: setting 
        value: setTBox.text 
       } 
      } 
     } 
    } 

    Column { 
     id: settingsColumn 
     spacing: 10 
     anchors.left: parent.left 
     anchors.right: parent.right 
     anchors.top: txtSave.bottom 
     anchors.topMargin: 15 

     Repeater { 
      model: settingsModel 
      delegate: settingsDelegate 
     } 
    } 
+0

uns Zeigen Sie, was Sie bisher versucht. – dtech

+0

@ddriver Ich habe nichts wirklich probiert, weil ich an nichts denken kann, das sogar funktionieren könnte – Gerharddc

+0

Es muss nicht funktionieren, es nur um Absicht und Anstrengung zu veranschaulichen. – dtech

Antwort

1

Mein Problem ist, dass der Name der Eigenschaft, die ich binden wollen, werden als String in der Komponente zur Verfügung gestellt werden. Wie kann ich den Eigenschaftsnamen in eine tatsächliche Eigenschaft auflösen, die als Wert in einer Bindung verwendet werden kann?

Wenn Sie the documentation for Binding schauen, werden Sie feststellen, dass die property Eigenschaft erwartet einen String - property : string

So haben Sie nichts zu lösen, die intern passiert.

mein Problem ist der "Wert: settings.setting" line

Sie könnten versuchen, so etwas wie settings[setting]

+0

Ja an dem einen Ende funktioniert das aber mein Problem ist der "Wert: Einstellungen .setting "Linie auf der anderen Bindung – Gerharddc

+0

Danke, das ist genau das, was ich brauchte! – Gerharddc

+1

@Gerharddc - Wenn Sie ausführlich mit QML arbeiten möchten, möchten Sie vielleicht die Grundlagen von JavaScript lernen. Es wird Ihnen viel Zeit sparen. Dein Problem war nur Standard-JS-Zeug. – dtech