QML Javascript словарь псевдонимов свойств не обновляется - PullRequest
0 голосов
/ 24 сентября 2019

Мой вопрос заключается в следующем:

Изменения в значениях словаря JavaScript не изменяют фактическое сопоставленное значение, а скорее его собственную внутреннюю копию?Есть ли способ обойти это?

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

У меня уже была эта проблема, когда точка доступа за пределами словаря исправила ее.Однако в этот раз я не могу сделать это из-за того, что вы не можете использовать точечный доступ, используя .text, потому что он вызывает ошибку не может прочитать свойство undefined.

QML: Невозможно прочитать свойство 'xxx'of undefined

Мой код напоминает что-то из следующего примера, я скрыл его, чтобы защитить фактическую информацию, так что извините, если это неприглядный пример.onUpdate передает другой словарь, который я хочу привязать к локальному словарю .qml.

ControllerDisplay.qml

// ...
property alias id1: id_box.text
// ...
SomeBox
{
  id: id_box
  text: "some text"
}

main.qml

ControllerDisplay{
  id: controller
}

// ...

Connections
{
  target: myguimodel
  onUpdate:
  {
    var dict = { "ID1" : controller.id1}
    for (var key in updates)
    {
      dict[key] = updates[key] // does NOT change the value in ControllerDisplay
      controller.id1 = updates[key] // DOES change the value ControllerDisplay

    }
  }
}

1 Ответ

0 голосов
/ 25 сентября 2019

Когда вы делаете var dict = { "ID1" : controller.id1}, вы сохраняете значение controller.id1, а не ссылку на него.

Если вы хотите изменить его, вы можете сделать:

var dict = { "ID1": { "object": controller, "property": "id1"}};
for (var key in updates) {
    var target = dict[key];
    target.object[target.property] = updates[key];
}

Хотя весь этот код не выглядит действительно идиоматическим QML.Я бы попробовал использовать привязку свойств на вашем месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...