3

Web コンポーネントの自動生成コードに問題があります。ここにHTMLの一部があります:

<div id="hidden-ui">
  <div id="auth-form" class="...">
    ...
    <to-button></to-button>
  </div>
  ...
</div>

ご覧のとおり、次のカスタム Web コンポーネントがありますto-button

<element name="to-button" constructor="TOSimpleButton" extends="div">
  ...
</element>

#auth-form起動時に、親ノードからドキュメントルートに移動したい:

Element af = document.query('#auth-form');
Element db = document.query('BODY');
db.children.add(af);

可動ノード内にカスタム Web コンポーネントがなくても問題ありませんが、可動ノードto-button内にあると実行時に RangeError が発生します。

自動生成されたコードの一部を次に示します。

 __e1 = __root.nodes[9].nodes[1].nodes[7];
 __t.component(new TOSimpleButton()..host = __e1);

ご覧のとおり、コンポーネントへの厳密な古いパスがあるため、RangeError 例外が発生します。

どうすればこれを処理できますか?

4

2 に答える 2

2

時々ポップアップフォームを表示したいようです。これが私がすることです。

ダイアログ/ポップアップに次のコンストラクターを指定します。

var lifecycleCaller;

DialogFooComponent() {
  host = new Element.html('<x-dialog-foo></x-dialog-foo>');

  lifecycleCaller = new ComponentItem(this)
    ..create();

  document.body.children.add(host);
  lifecycleCaller.insert();
}

ご覧のとおり、ドキュメントの本文に追加します。ただし、これは新しいインスタンスの作成時にのみ発生します。

そのポップアップを表示する必要があるときはいつでも、次のようなコードがあります。

import '../dialog/foo/foo.dart';

...

// Later at some point I do:
new DialogFooComponent();

そして何が起こるかというと、必要なときにいつでも本体にポップアップ フォームが表示されるということです。

ダイアログを閉じたいときは、ダイアログ コンポーネント内でこれを呼び出すだけです。

lifecycleCaller.remove();
于 2013-07-30T10:37:48.957 に答える