2016-05-05 1 views
1

私はbindingContextにプロパティを追加するカスタム属性を持っています。これにより、他のカスタム属性/要素がこのデータを利用できるようになります。Aurelia repeatは親スコープのカスタムプロパティを消去するようです

だから、例えば属性のバインド方法は、次のようになります。

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

今、このカスタム属性の範囲内に含まれるもの、すなわち、正常に動作します:

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

だからセクションの属性セットを想定しbindingContextプロパティの場合、some-other-attributebindingContextのプロパティにアクセスし、すべて機能します。

ただし、リピートを使用してリピートバインド内でsome-other-attributeを使用したい場合は、bindingContextにはsomeCustomPropertyがなくなります。それで、バインディング・コンテキストに追加し、繰り返しまたは他の子バインディングを通して永続する「正しい」方法がありますか?

答えて

4

あなたはこのように動作するようにあなたのカスタム属性を変更することがあります。

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

私はそれが存在する主な理由の一つは次のように追加の「文脈」バインド可能な小道具を格納するためのものであるので、あなたがoverrideContextを使用して示唆しています$event$first$last$indexなど、基になるビューモデルに小道具を追加することなく、

この変更だけでは問題は解決しません。何が起こっているのかは、repeatの各アイテムがそれ自身のbindingContext/overrideContextであることです。これらはあなたが$firstのようなrepeat-specific propsを探すことで、「リピート」のシナリオを検出することができるように、階層です$last$odd$even

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

華麗ああ、すべてのコンテキストがアクセス権を持っているか、デフォルトではので、その行くを与えます彼らの両親に(示されているように)? – Grofit

+0

'foo.bind =" bar "'のようなことをすると、バインディングシステムはoverrideContextで 'bar'を探し、次にbindingContextで親のoverrideContextで親バインディングコンテキストで' bar'を探します。等々。 –

+0

すべてのコンテキストがその親にアクセスできるわけではありません。たとえば、カスタム要素にはparentOverrideContextはありません。これにより、カスタム要素がカプセル化され、移植可能になります。彼らは外側の範囲にアクセスすることはできません。 –

関連する問題