以下答案
我遇到Aurelia bindingcontext被父组件替换的问题。
我有一个第一个组件,它有一个 sourceItem 属性,它在视图中被绑定:
${sourceItem.Name}
这显示正确的值“父名称”..
此组件具有路由器视图,其中创建了另一个组件。我可以看到这个子组件没有问题。问题是这个子组件还有一个 sourceItem 属性,它以相同的方式绑定在其视图中。
${sourceItem.Name}
此应该显示值“子名称”,但是虽然我可以看到第二个 sourceItem 正确创建,但视图显示父绑定上下文的值:父姓“
如果我更改其中一个 sourceItem 的名称(例如 sourceItem1 ),一切正常。不知道我是否犯了一些错误,或者某个地方是否有漏洞?
非常感谢!
编辑更多信息 我注意到,当导航到子路线时,问题出现在我身上。但是当我在浏览器的栏中输入完整的URL并加载页面时,绑定正常工作。当我检查bindingContext& overrideContext(在bind()方法中),结果完全相同。所以它看起来可能是一个时间问题......
答案 0 :(得分:1)
我也在github发布了这个问题,我得到了答案。 就我而言,我有一些异步代码在我的子路由视图模型的activate方法中从服务器检索数据。问题显然来自于服务器在绑定引擎被触发之前没有返回的事实,因此它获取了它可以找到的信息(父级的绑定上下文)。
我只需要从activate方法返回promise,这样aurelia会在启动绑定引擎之前等待promise返回...
答案 1 :(得分:0)
我想这是按照文档中所述的预期工作:
"范围"在aurelia中由两个对象组成:bindingContext(几乎总是一个视图模型实例)和overrideContext,它可以被认为是一个" overlay" bindingContext的。 overrideContext上的属性"覆盖" bindingContext上的相应属性。实际上很少有一个属性在overrideContext上是"隐藏"下面的bindingContext上的一个属性。 ...
请参阅:http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-how-it-works/3