2017-09-23 2 views
0

私は要素を作成し、それをインポートし、データで属性を設定します。要素がインポートされずに作成されていない場合にのみ、コードを実行します。 は、関数が呼び出されたとき、私は次のエラーを取得する:何が起こっているPolymer 2.0 createElementを作成し、Polymer.importHrefでインポートし、setAttributeでデータを渡します。

this._dialogPopUp.open is not a function 

は要素が作成され、インポートする前this._dialogPopUp.open();が実行されているということです。 2回目にボタンを押すと、ポップアップが作成され、以前にインポートされたために機能します。要素の作成とインポートを待ってから、実行を続行するにはどうすればよいですか?

は現在、私はこの実装を持っている:

_loadDialogPopUp(e) { 
    let me = this; 
    if(!me._dialogPopUp){ 
    me._dialogPopUp = document.createElement('su-dialog'); 
    Polymer.importHref(this.resolveUrl('su-dialog.html'), (e) => { 
     this.root.appendChild(this._dialogPopUp); 
    }); 
    } 
    customElements.whenDefined('su-dialog').then(() => { 
    me._dialogPopUp.open(); 
    me._dialogPopUp.setAttribute('uid', this.user.uid); 
    }) 
} 

答えて

0

あなたがそれの機能を使用することができます前に、要素は、実際に「アップグレード」されたかどうかを確認する必要があります。幸いなことに、その標準的な考え方。詳細は

customElements.whenDefined('su-dialog').then(() => { 
    this._dialogPopUp.open(); 
    this._dialogPopUp.setAttribute('uid', this.user.uid); 
}); 

https://developers.google.com/web/fundamentals/architecture/building-components/customelements

+0

ありがとう参照、右方向そうです。私は 'customElements.whenDefined'を実装するコードを更新しました。新しく作成された要素の参照を取得するにはどうすればよいですか? –

関連する問題