Aurelia repeat似乎删除了父范围

时间:2016-05-05 12:57:39

标签: javascript aurelia

我有一个自定义属性,可以为bindingContext添加一个属性,以便其他自定义属性/元素可以使用这些数据。

因此,例如属性bind方法可能如下所示:

bind(binding, scope) {
    binding.someCustomProperty= this.value; // have tried using scope too
}

现在,包含在此自定义属性范围内的任何内容都可以正常工作,即:

<section my-attribute="something">
    <input some-other-attribute="somethingElse">
</section>

因此,假设section属性设置了bindingContext属性,那么some-other-attribute将访问bindingContext上的该属性,它将全部有效。

然而,当我使用重复并且想要在重复绑定中使用some-other-attribute时,问题出现了,bindingContext丢失了someCustomProperty。那么有一个&#34;正确的&#34;添加到绑定上下文并通过重复或其他子绑定持续存在的方法?

1 个答案:

答案 0 :(得分:4)

您可能希望将自定义属性更改为以下方式:

bind(bindingContext, overrideContext) {
  overrideContext.someProperty = something;
}

我建议你使用overrideContext,因为它存在的一个主要原因是存储额外的&#34;上下文&#34;可绑定的道具,例如$event$first$last$index等,而无需向基础视图模型添加道具。

此更改单独无法解决您的问题。发生了什么,重复中的每个项目都有自己的bindingContext / overrideContext。这些是层次结构,因此您可以检测到&#34;重复&#34;通过查找repeat-specific props,例如$first$last$odd$even

bind(bindingContext, overrideContext) {
  // are we in a repeat?
  if ($even in overrideContext) {
    overrideContext = overrideContext.parentOverrideContext;
  }
  overrideContext.someProperty = something;
}