Ember.jsアプリを構築していますが、すべてがレンダリング/ロードされた後、追加のセットアップを行う必要があります。
そのようなコールバックを取得する方法はありますか?ありがとう!
Ember.jsアプリを構築していますが、すべてがレンダリング/ロードされた後、追加のセットアップを行う必要があります。
そのようなコールバックを取得する方法はありますか?ありがとう!
オーバーロードすることができ、自動的に呼び出されるビューで定義されたいくつかの関数もあります。これらには、、、などwillInsertElement()
が含まれます。didInsertElement()
afterRender()
特にdidInsertElement()
、通常のオブジェクト指向システムではコンストラクターで実行されるコードを実行するのに便利な時期を見つけました。
ready
のプロパティを使用できますEmber.Application
。
http://awardwinningfjords.com/2011/12/27/emberjs-collections.htmlからの例:
// Setup a global namespace for our code.
Twitter = Em.Application.create({
// When everything is loaded.
ready: function() {
// Start polling Twitter
setInterval(function() {
Twitter.searchResults.refresh();
}, 2000);
// The default search is empty, let's find some cats.
Twitter.searchResults.set("query", "cats");
// Call the superclass's `ready` method.
this._super();
}
});
LazyBoyの答えはあなたがやりたいことですが、それはあなたが思っているものとは違った働きをします。あなたの質問の言い回しは、Emberについての興味深い点を浮き彫りにします。
あなたの質問では、ビューがレンダリングされた後にコールバックが必要であると指定しました。ただし、適切な「Ember」スタイルの場合は、アプリケーションが初期化された後、ビューがレンダリングされる前に起動する「ready」コールバックを使用する必要があります。
重要な概念上のポイントは、コールバックがデータモデルを更新した後、Emberにビューを更新させる必要があるということです。
残り火にビューを更新させるのはほとんど簡単です。ビュー内の状態遷移のちらつきを回避するために、「didFoo」コールバックを使用する必要があるエッジケースがいくつかあります。(たとえば、0.2秒間「アイテムが見つかりません」と表示しないようにします。)
それでもうまくいかない場合は、「onLoad」コールバックを調べることもできます。
これには、jQueryajaxコールバックを使用できます。
$(document).ajaxStart(function(){ console.log("ajax started")})
$(document).ajaxStop(function(){ console.log("ajax stopped")})
これはすべてのajaxリクエストで機能します。
これをアプリケーションルートに入れるだけです
actions: {
loading: function(transition, route) {
this.controllerFor('application').set('isLoading', true);
this.router.on('didTransition', this, function(){
this.controllerFor('application').set('isLoading', false);
});
}
}
そして、テンプレートのどこでも、{{#if isLoading}}を使用して読み込みを有効または無効にするか、実際の読み込みアクション内に特別なjQueryイベントを追加できます。
非常にシンプルですが効果的です。