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

ОТВЕТИТЬ НИЖЕ

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

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

${sourceItem.Name}

Это показывает правильное значение "Родительское имя"..

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

${sourceItem.Name}

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

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

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам