2017-12-05 11 views
1

mixinsのセットを書いています。私が理解しているように、各ミックスインは機能を提供し、他のミックスインには影響を与えません。Polymer v2.0:再利用可能なmixinコードの書き方

だから私はこのような何かを書く:

const MixinA = superClass => class extends superClass { 
    connectedCallback() { 
    this.addEventListener('click', this.handleClick_); 
    } 

    /** 
    * @return {Array.<string>} 
    */ 
    static get observers() { 
    return [ 
     'handleMyPropChange_(myProp)', 
    ]; 
    } 
} 

それから私はこのような何かを追加:私は同じ要素をこのミックスインの両方を適用する場合は、handleMyPropChange_の1が非表示になります

const MixinB = superClass => class extends superClass { 
    /** 
    * @return {Array.<string>} 
    */ 
    static get observers() { 
    return [ 
     'handleMyPropChange_(myProp)', 
    ]; 
    } 
} 

を2回目が2回トリガーされます。

と同じ問題があります。この例ではhandleClick_です。

Polymer v1の動作にはこのような問題はありませんでした。

私が見つけた唯一の方法は、彼らに一意の名前を与えるために、各プライベートクラスメンバーにいくつかのミックスインの特定の接頭辞を追加することですが、それはない非常にこの問題に対処するための最良のオプションは何ですかhandyюに見えますか?

+0

JSFiddle:https://jsfiddle.net/stramel/Lmtm9f49/ –

答えて

1

ポリマー2では、クラスを拡張しています。これは、指定された名前の関数が1つしか存在しないことを意味します。基本的には、以前に定義された関数を最新のもので上書きしています。この機能は、各ミックスインがオブザーバを登録しているため、2回発射されています。これらはデュープ除去されません。

関数が論理的に同じ場合、私はそれを抽象化します。それらが論理的に異なる場合、私は機能が何をしているかに基づいて、より明確な別の名前を提供します。彼が見ているの

関連する問題