aurelia bindingcontext переопределяется родителем

ОТВЕТЫ НИЖЕ

У меня проблема с заменой контекста привязки Aurelia родительским компонентом.

У меня есть первый компонент, у которого есть свойство sourceItem, привязанное к его представлению:

${sourceItem.Name}

Это показывает правильное значение «Имя родителя»..

Этот компонент имеет маршрутизатор-представление, в котором создается другой компонент. Я вижу, что этот дочерний компонент создается без проблем. Проблема в том, что этот дочерний компонент также имеет свойство sourceItem, которое точно так же привязано к его представлению.

${sourceItem.Name}

Это ДОЛЖНО показывать значение «Имя дочернего элемента», но хотя я вижу, что этот второй sourceItem создается правильно, представление отображает значение контекста привязки родителя: «Имя родителя»

Если я изменю имя одного из sourceItem (например, на sourceItem1), все будет работать нормально. Любая идея, если я сделал какую-то ошибку или где-то висит ошибка?

Большое спасибо!

ИЗМЕНИТЬ ДЛЯ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ Я заметил, что при переходе к дочернему маршруту у меня возникает проблема. Но когда я ввел полный URL-адрес в строку браузера и загрузил страницу, привязка работает правильно. Когда я проверяю bindingContext и overrideContext (в методе bind()), результаты точно такие же. Так что, похоже, дело в сроках...


person Gaet    schedule 27.06.2017    source источник


Ответы (2)


Я также разместил этот вопрос на github и получил ответ. В моем случае у меня был асинхронный код, извлекающий данные с сервера в методе активации модели представления моего дочернего маршрута. Проблема, по-видимому, возникла из-за того, что сервер не вернулся до того, как был запущен механизм привязки, поэтому он взял информацию, которую смог найти (родительский контекст привязки).

Мне просто нужно было вернуть обещание из метода активации, чтобы Аурелия дождалась возврата обещания, прежде чем запускать механизм привязки...

person Gaet    schedule 28.06.2017

Я предполагаю, что это работает так, как указано в документах:

«Область» в aurelia состоит из двух объектов: bindingContext (почти всегда экземпляр модели представления) и overrideContext, который можно рассматривать как «наложение» на bindingContext. Свойства в overrideContext «переопределяют» соответствующие свойства в bindingContext. На самом деле редко бывает свойство в overrideContext, которое «скрывает» свойство в BindingContext ниже. ...

См.: http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-how-it-works/3

person Marc Scheib    schedule 27.06.2017
comment
Я не уверен в этом. Насколько я понимаю, контекст переопределения — это отдельный объект от контекста привязки. И в моем случае, когда я использую расширение Aurelia chrome, я вижу контекст привязки моего дочернего компонента (его значение правильное), а контекст переопределения пуст... - person Gaet; 27.06.2017
comment
Возможно, это верно для доступа к контексту в виртуальной машине, однако представление может иметь доступ только к комбинации того и другого, так называемому оверлею в документах? - person Marc Scheib; 27.06.2017
comment
возможно.. Я пытаюсь получить больше информации от людей из Аурелии. Я вернусь сюда, чтобы подтвердить/дополнить ваш ответ, когда получу более подробную информацию... Уже благодарю вас за вашу помощь! - person Gaet; 27.06.2017