2017-06-06 5 views
0

this Plunker minimal example codeを検討してください。onclickインラインスクリプトは、shadow-dom(Polymer v2.0)のIDを参照できません

<dom-module id="my-element"> 
    ... 
    <button onclick="dialog.open()">What is Confucianism ?</button> 

    <paper-dialog id="dialog" modal> 
    <h2>Confucianism</h2> 
    <p>...</p> 
    </paper-dialog> 
    ... 
</dom-module> 

は機能しません。

ポリマーv2.0です。ボタンをクリックすると、dialog.open()が失敗し、ダイアログは定義されていません。

Polymerの以前のバージョンでは、このコードは機能しましたが、コードをアップグレードしたので、どこでもこの問題を解決する必要があります。ペーパーダイアログ要素を使用しています。私の現在の解決策は、コード内のすべてのボタンにという属性をクリックして属性を追加し、手作業で結び付けた関数を書き込んでthis.$.<dialogID>.open();を実行することですが、なぜそれをしなければならないのか分かりませんし、より退屈なコードを書いているので私には、この後の互換性は、新しいバージョンの不利なように思える。

私は本当に何か間違っていますか?

答えて

0

このアプローチは本当に悪いです。常にダイアログを開く関数を呼び出す必要があります。さらに、ポリマーイベントハンドラを使用する必要があります。例えばon-tapである。

あなたのコードはなぜ機能しなくなったのですか?それはあなたがシャドウドームを使っているかどうかによって決まります。シャドーDOMにはshadowRootがあるので、閉じたとしましょう。windowオブジェクトには、プロパティとして保存されたIDを持つ要素がありません。

通常、IDを持つ要素を定義するたびに、この要素はwindowオブジェクト内に保存されるため、<someID>.<someFunction>を使用することができます。

ポリマーイベントハンドラ機能を使用するように、アプリケーションを間違いなく書き直す必要があります。

EDIT:

将来の信頼性の高いソリューションのために、この機能のリクエスト#4647を考えてみましょう。

+0

@ ballangddang編集していただきありがとうございました。私は常にchangelogsを見ているので、私はすぐにこの機能を見ることを願っています。多くの定型関数を削除することができます –

関連する問題