2016-04-03 1 views
0

Я хочу создать привязку QML в повторяющемся компоненте. Я хочу привязать значение одного из элементов к свойству из известного объекта. Моя проблема в том, что имя указанного свойства, которое я хочу связать, будет предоставлено в виде строки в компоненте. Как я могу разрешить имя свойства фактическому свойству, которое может использоваться как значение в привязке?Свойство объекта доступа QML по имени свойства

PS. Если возможно, я предполагаю, что могу передать свойство непосредственно репитеру, но тогда я хотел бы иметь возможность преобразовать свойство в строку, потому что мне нужно обоим и не хочу передавать оба.

EDIT: Вот что я хочу:

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

Покажите нам, что вы пробовали до сих пор. – dtech

+0

@ddriver Я на самом деле ничего не пробовал, потому что я не могу думать ни о чем, что могло бы даже работать – Gerharddc

+0

Это не должно работать, это просто для того, чтобы проиллюстрировать намерения и усилия. – dtech

ответ

1

Моя проблема заключается в том, что имя указанного свойства, что я хочу, чтобы привязать к будет предоставляться в виде строки в компоненте. Как я могу разрешить имя свойства фактическому свойству, которое может использоваться как значение в привязке ?

Если вы посмотрите на the documentation for Binding вы обнаружите, что property свойство ожидает строку - property : string

Таким образом, вы не имеете ничего, чтобы решить, что происходит внутри.

моя проблема заключается в "значение: settings.setting" линия

Вы могли бы попробовать что-то вроде settings[setting]

+0

Да на одном конце, который работает, но моя проблема - это значение: settings .setting "line on other binding – Gerharddc

+0

Спасибо, это именно то, что мне нужно! – Gerharddc

+1

@Gerharddc - если вы планируете широко использовать QML, вам может понадобиться изучить основы JavaScript. Это сэкономит вам много времени. Ваша проблема была просто стандартным материалом JS. – dtech