【问题标题】:aurelia bindingcontext gets overridden by parentaurelia bindingcontext 被父级覆盖
【发布时间】:2017-11-30 06:14:06
【问题描述】:

答案如下

我在将 Aurelia 绑定上下文替换为父组件时遇到问题。

我有一个第一个组件,它有一个绑定在其视图中的 sourceItem 属性:

${sourceItem.Name}

这显示了正确的值“父名”..

这个组件有一个router-view,另一个组件在其中被创建。我可以看到这个子组件的创建没有问题。问题是这个子组件还有一个 sourceItem 属性,它以同样的方式绑定在它的视图中。

${sourceItem.Name}

这个应该显示值“子名”,但是虽然我可以看到第二个 sourceItem 被正确创建,但视图显示了父绑定上下文的值:“父母姓名”

如果我更改其中一个 sourceItem 的名称(例如更改为 sourceItem1),一切正常。知道我是否犯了一些错误或某处是否存在错误?

非常感谢!

编辑以获取更多信息 我注意到,当导航到子路线时,我遇到了问题。但是当我在浏览器栏中输入完整的 URL 并加载页面时,绑定工作正常。当我检查 bindingContext 和 overrideContext (在 bind() 方法中)时,结果完全相同。所以看起来可能是时间问题...

【问题讨论】:

    标签: binding aurelia binding-context


    【解决方案1】:

    我想这正如文档中所述的那样工作:

    aurelia 中的“范围”由两个对象组成:bindingContext(几乎总是一个视图模型实例)和 overrideContext,它可以被认为是 bindingContext 的“覆盖”。 overrideContext 上的属性“覆盖”bindingContext 上的相应属性。实际上很少有 overrideContext 上的属性“隐藏”下面的 bindingContext 上的属性。 ...

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

    【讨论】:

    • 对此我不确定。据我了解,覆盖上下文是与绑定上下文不同的对象。在我的例子中,当我使用 Aurelia chrome 扩展时,我可以看到我的子组件的绑定上下文(它的值是正确的)并且覆盖上下文是空的......
    • 也许这在访问VM中的上下文时是正确的,但是,视图可能只能访问两者的组合,即文档中所谓的覆盖?
    • 也许.. 我正试图从 aurelia 的人那里获得更多信息。当我获得更多详细信息时,我会回来确认/完成您的回答...已经感谢您的帮助!
    【解决方案2】:

    我也在github 上发布了这个问题,我得到了答案。 就我而言,我有一些异步代码在我的子路由视图模型的激活方法中从服务器检索数据。问题显然来自服务器在绑定引擎被触发之前没有返回,因此它获取了它可以找到的信息(父级的绑定上下文)。

    我只需要从 activate 方法中返回承诺,因此 aurelia 会在启动绑定引擎之前等待承诺返回...

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 2022-01-19
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2012-10-07
      相关资源
      最近更新 更多