Синтаксис QML
определяет, что фигурные скобки в правой части присваивания инициализации значения свойства обозначают назначение привязки. Это может запутать при инициализации свойства var
, поскольку пустые фигурные скобки в JavaScript могут обозначать либо блок выражений, либо объявление пустого объекта. Если вы хотите инициализировать свойство var
пустым значением объекта, вы должны обернуть фигурные скобки в круглых скобках.
Например:
Item {
property var first: {} // nothing = undefined
property var second: {{}} // empty expression block = undefined
property var third: ({}) // empty object
}
В предыдущем примере, первое свойство связывается с пустым выражением, результатом которого является undefined
. Второе свойство связано с выражением, которое содержит единственный пустой блок ("{}")
, который также имеет результат undefined
. Третье свойство привязано к выражению, которое оценивается как объявление пустого объекта, и, таким образом, свойство будет инициализировано с этим значением пустого объекта.
Аналогично, двоеточие в JavaScript может быть либо присвоением значения свойства объекта, либо меткой кода. Таким образом, инициализация var
свойства с описанием объекта может также потребовать скобки:
Item {
property var first: { example: 'true' } // example is interpreted as a label
property var second: ({ example: 'true' }) // example is interpreted as a property
property var third: { 'example': 'true' } // example is interpreted as a property
Component.onCompleted: {
console.log(first.example) // prints 'undefined', as "first" was assigned a string
console.log(second.example) // prints 'true'
console.log(third.example) // prints 'true'
}
}
Таким образом, код должен быть следующим:
Rectangle {
height: 400
width: 500
property var someObj: ({color: ''})
Binding on color {
when: someObj.color
value: someObj.color
}
}
Похож на ошибку. – Mitch
Ух ... вы пытались свести к минимуму пример, чтобы изолировать (возможную) ошибку? если бы вы могли опубликовать этот минимальный пример, было бы интересно проверить его. – BaCaRoZzo
@BaCaRoZzo Я отредактировал минимальный пример в вопросе. – cmannett85