2016-05-06 7 views
1

を登録して、私のindex.htmlです:ダート/ポリマー:イベントリスナーの前に、私のアプリのコンストラクタを実行する前に発射イベントはここで

<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 

    <title>My App</title> 

    <link rel="stylesheet" href="./styles.css" shim-shadowdom> 

    <link rel="import" href="packages/myapp_frontend/elements/my_app/my_app.html"> 
    <link rel="stylesheet" href="packages/myapp_frontend/fonts/fonts.css"> 

    <script src="cordova.js" type="application/javascript"></script> 
    </head> 

    <body unresolved fullbleed> 
    <my-app></my-app> 

    <script src="socket.io.js" type="application/javascript"></script> 
    <script src="main.dart" type="application/dart"></script> 
    <script src="packages/browser/dart.js"></script> 
    </body> 
</html> 

my_app.htmlインサイドリスト全体のアプリのためのすべての要素。これは問題ありません。要素の中には、のようなプラグインラッパー(<cordova-app-version on-app-version="{{ onVersionInfo }}"></cordova-app-version>)があります(cordova_app_version_pluginをラップします)。この要素は、次のようになります。これは、DOMに追加された時点で

@CustomTag('cordova-app-version') 
class CordovaAppVersion extends PolymerElement { 
    CordovaAppVersion.created() : super.created() { 
    document.on['deviceready'].listen((var e) { 
     this.fire('app-version', detail: 
      context['cordova']['plugins']['version'].callMethod('getAppVersion')); 
    }); 
    } 
} 

devciereadyはすでに解雇、そうapp-versionイベントが発生し、すぐにされています。一方、MyApp.created()関数はまだ実行されておらず、上記の"{{ onVersionInfo }}"を含むイベントリスナは(明らかに)登録されていません。 app-versionイベントが発生し、誰もそれを聞きません。その後数ms後、MyApp.created()が実行されたというメッセージが表示されます。 app-versionイベントを手動で開始すると、正しく処理されます。

MyAppのコンストラクタの後に起動するように、タイマー(setTimeout equiv)を使用するようにすべてのプラグインファイルを手動で変更する必要はありませんが、それ以外のことはわかりません。 devicereadyイベントがすべての子要素がイベントを送信する前に、イベントリスナーが登録されていることを確認するにはどうすればよいですか?

答えて

0

DOMにアクセスするコードは、Polymer要素のコンストラクタで実行しないでください。コンストラクタは、ローカルフィールドの初期化にのみ使用する必要があります。

attached()またはready()などのライフサイクルコールバックコードを移動すると、期待どおりに機能します。

も参照してくださいhttps://github.com/dart-lang/polymer-dart/wiki/registration-and-lifecycle#lifecycle-callbacks

+0

私はあなたが提案してきたように私のコードを変更し、 '' CordovaAppVersion.created()から '')(レディ ''無効に機能を移動し、 ''しかし、イベントの順序ましたまだ私が期待しているものではありません。上記の要素のために、私は次のログステートメントを(順番に)持っています: '' cordovia-app-version created、cordovia-app-version ready、発射app-versionイベント、myApp created、myApp ready'' –

+0

イベントの完全なチェーンは次のとおりです。「アプリケーションのバージョンが作成され、アプリケーションバージョンが作成され、アプリケーションバージョンが作成され、アプリケーションバージョンが発行され、アプリケーションバージョンが添付され、myAppが準備され、myAppが作成され、myAppが接続されました。私は、間違っていても、私は本当にそれについて何をすべきか分かりません。 –

+0

申し訳ありませんが、私は質問を誤解しました。イベントが早すぎる場合は、おそらくポリマーの外側にイベントリスナーを追加する必要があります(たとえば、 'main()')。 –

関連する問題