2017-03-13 42 views
1

私が扱っているAureliaカスタム属性があるとします。別のカスタム属性にバインドされた値が変更されたときにイベントを発生させることはできますか?他のカスタム属性からカスタム属性のバインディングにアクセスする

さらに具体的に言えば、私は選択したAureliaカスタム属性を作成しています。私はChosenが働いています。

しかし、<select>要素にはfocus.bind="isFocused"があります。バインドされた値が変更されたときに知りたい(選んだカスタム属性内で)必要があります。

私の選択したカスタム属性で(フォーカスカスタム属性から)そのフォーカスバインディングにアクセスする方法はありますか?おそらくバインディングエンジンや内部メソッドを使用していますか?

(注:これを行うためのカスタム要素を作成することを検討しましたが、Aureliaは要素をラッピングするためにはうまくいきません。元の選択コンポーネントにあるスタイル、クラスなどの接続をコーディングする必要があります。

+0

おそらく、あなたが結合挙動 'signal'使用することができます:ちょうどhttp://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-binding-behaviors/5を最初の考え –

+0

@marc私はそれを広範囲にわたって調べました。このような状況では機能しません。 – Vaccano

答えて

0

これが正しい方法であるかどうかはわかりませんが、それはこれまでに見つけた最も簡単な方法です。

私-attr.js

import { inject } from 'aurelia-framework'; 
import { Focus } from 'aurelia-templating-resources'; 

@inject(Focus) 
export class MyAttrCustomAttribute { 

    constructor(focusAttr) { 
    this.focusAttr = focusAttr; 
    } 

    attached() { 
    console.log(this.focusAttr.value); //bound value 

    //... 
    //extending the change event. BE CAREFUL! 
    //... 

    const originalValueChanged = this.focusAttr.valueChanged; 
    this.focusAttr.valueChanged = function(newValue) { 
     console.log('Focus bound value has changed!'); //<-- call an event before "focus" 
     originalValueChanged.call(this, newValue); //<-- "focus" is enqueued 
     // <--- enqueue an event event here to be called after "focus" 
    } 

    } 
} 

例を実行https://gist.run/?id=ab04facb60b39f9c6a5fc49c2fd278a6

0

方法(ビューを更新)結合のupdateSourceを傍受する結合挙動を使用してみてください(ビューモデルを更新する)とupdateTarget。この例の実行例は、カスタムバインディング動作セクションのドキュメントにあります。

http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-binding-behaviors/8

+0

2番目のバインディングがオプションの場合はどうなりますか? –

関連する問題