2017-11-22 5 views
0

私は要素/アプリケーションの中にいないポリマー要素をいくつか持っており、グローバルハンドブック関数にon-clickなどのイベントハンドラをどのように付け加えるかを理解できません。Polymer 2.xイベントハンドラをグローバル関数にバインドしますか?

たとえば、のはon-tapが囲み要素(私は推測)のプロパティにバインドすることを期待するので、私のコードは、これは動作しません。この

<head> 
    // Import stuff... 

    function login(){ 
     // Do stuff 
    } 
</head> 
<body unresolved>  
    <dom-if id="signInItem"> 
     <template> 
      <paper-button on-tap="login"><iron-icon icon="icons:account-circle"></iron-icon> &nbsp; Log in</paper-button> 
     </template> 
    </dom-if> 
</body> 

ようになりましょう。私の選択肢は何ですか?

+1

onclick = "myFunction()"イベントはどうでしょうか? –

答えて

1

紙、ボタンのいくつかのIDを与える

this.$.button.addEventListener('click', e => { 
    console.log("clicked"); 
    // write your code 
    }); 

下に表示したり、別々の機能でコードを書くことができるよう、あなたがのEventListenerを追加することができますJavaScriptで

<paper-button id="button"></paper-button> 

ready() { 
    super.ready(); 
    this.$.button.addEventListener('click', e => this.handleClick(e)); 
} 
handleClick(e) { 
    console.log(e); 
} 
0

ポリマーではない機能を発するのが好きなら、あなたは電話することができます。

this.dispatchEvent(new CustomEvent('login', { bubbles: true, composed: true, detail: true })); 

これはあなたのlogin次のようにグローバルJS(すなわちmain.js。)に耳を傾け起動します。

addEventListener('login', function (e) { 
     // Do something for login 

}) 

編集:私はあなたが常にローカルクラスのメンバ関数へのコールを転送することができ、そのルートレベルで

0

としてあなたもこのコードをバインドするために、DOM-場合DOMバインドへの変更する必要があると思います(MyElement.login)グローバル名前空間に:

/* 1 */ class MyElement extends Polymer.Element { 
/* 2 */  // ... 
/* 3 */  
/* 4 */  login: (() => (evt) (MyGlobalNamespace || window).login.bind(this))() 
/* 5 */ } 

あなたも、周囲の閉鎖機能を省略することができます - あなたはloginの実装内thisを使用していない場合 - に4行目を簡素化:login: (MyGlobalNamespace || window).login

関連する問題