Javascript Aurelia repeat似乎删除父范围中的自定义属性

Javascript Aurelia repeat似乎删除父范围中的自定义属性,javascript,aurelia,Javascript,Aurelia,我有一个自定义属性,它向bindingContext添加了一个属性,以便其他自定义属性/元素可以使用此数据 例如,属性绑定方法可能如下所示: bind(binding, scope) { binding.someCustomProperty= this.value; // have tried using scope too } 现在,此自定义属性范围内包含的任何内容都可以正常工作,即: <section my-attribute="something"> <

我有一个自定义属性,它向
bindingContext
添加了一个属性,以便其他自定义属性/元素可以使用此数据

例如,属性绑定方法可能如下所示:

bind(binding, scope) {
    binding.someCustomProperty= this.value; // have tried using scope too
}
现在,此自定义属性范围内包含的任何内容都可以正常工作,即:

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

因此,假设section属性设置了
bindingContext
属性,那么
其他一些属性将访问
bindingContext
上的该属性,并且所有属性都将工作


但是,当我使用repeat并希望在repeat绑定中使用
someother属性时,问题就出现了,
bindingContext
会丢失
someCustomProperty
。那么,是否有一种“正确”的方法可以添加到绑定上下文中,并通过重复或其他子绑定来持久化?

您可能希望更改自定义属性以如下方式工作:

bind(bindingContext,overrideContext){
overrideContext.someProperty=something;
}
我建议您使用
overrideContext
,因为它存在的一个主要原因是存储额外的“上下文”可绑定的道具,如
$event
$first
$last
$index
等,而不向基础视图模型添加道具

仅此更改无法解决您的问题。所发生的是,repeat中的每个项都有自己的bindingContext/overrideContext。这是一个层次结构,因此您可以通过查找诸如
$first
$last
$odd
$偶数
,来检测“重复”场景:

bind(bindingContext,overrideContext){
//我们在重复吗?
如果($即使在文本中){
overrideContext=overrideContext.parentOverrideContext;
}
overrideContext.someProperty=something;
}

您可能希望更改自定义属性以如下方式工作:

bind(bindingContext,overrideContext){
overrideContext.someProperty=something;
}
我建议您使用
overrideContext
,因为它存在的一个主要原因是存储额外的“上下文”可绑定的道具,如
$event
$first
$last
$index
等,而不向基础视图模型添加道具

仅此更改无法解决您的问题。所发生的是,repeat中的每个项都有自己的bindingContext/overrideContext。这是一个层次结构,因此您可以通过查找诸如
$first
$last
$odd
$偶数
,来检测“重复”场景:

bind(bindingContext,overrideContext){
//我们在重复吗?
如果($即使在文本中){
overrideContext=overrideContext.parentOverrideContext;
}
overrideContext.someProperty=something;
}

Ah brilliant,将尝试一下,因此默认情况下所有上下文都可以访问它们的父上下文(如图所示)?对,当您执行类似于
foo.bind=“bar”
的操作时,绑定系统将在overrideContext上查找
bar
,然后在bindingContext上,然后在父overrideContext上,然后在父bindingContext上,依此类推。并非所有上下文都可以访问其父上下文,例如,自定义元素将不具有parentOverrideContext。这使自定义元素保持封装和可移植性。他们无法访问外部作用域。啊,brilliant,会这样做,所以默认情况下,所有上下文都可以访问其父上下文(如图所示)?对,当您执行类似于
foo.bind=“bar”
的操作时,绑定系统将在overrideContext上查找
bar
,然后在bindingContext上,然后在父overrideContext上,然后在父bindingContext上,依此类推。并非所有上下文都可以访问其父上下文,例如,自定义元素将不具有parentOverrideContext。这使自定义元素保持封装和可移植性。他们无法访问外部范围。