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。这使自定义元素保持封装和可移植性。他们无法访问外部范围。