簡略化されたデモ: http://jsfiddle.net/indream/KskXx/
(このデモでは、私の問題で実際の環境をシミュレートできません)
デモの場合: 写真にカーソルを合わせると、キャプションが表示されます。写真をクリックすると、ヘルパーとライトボックスが開いた
状態でルートが「メディア」に変更されました。
ライトボックスの外側の場所をクリックすると、ライトボックスを閉じてルートが「フィード」に戻りました。{{linkTo}}
history API
私の質問: 「フィード」に戻ると、テンプレートが再レンダリングされます。
(その後、キャプションが失われるので、写真にカーソルを合わせると確認できます。)
写真が多いと再レンダリング時にアプリが遅くなるのでやめたいです。
使用{{linkTo}}
が問題の理由です。私の回答を参照してください
Ember.js - currentViewBindingのようなサーバー関連の質問を読み、ビューの遷移ごとに再レンダリングを停止し、 Emberjs で破壊される前にビューをアニメーション化します。
しかし、提供されたメソッドはRC2では機能しないようです。イベントを変更しようとしましたがwillDestroy
、再レンダリングでは機能しませんが
Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM.
Uncaught Error: NotFoundError: DOM Exception 8
、別のルートに切り替えたときにスローされました(つまりnowContent
、他のコンテンツをロードするために空です)。そして、変更destroyElement
はまったく機能しません。
これが私のコードです。私の問題を解決するためのアイデアはありますか?
App.MainView = Ember.View.extend({
templateName:'main',
willDestroy: function() {
if (App.get('destroyCurrentView')){
this._super();
}
}
})
App.PageController = Ember.Controller.extend({
lightboxClose:function(e){
if(!e||e.target==e.currentTarget){
$('#lightbox').hide();
$('body').removeClass('noscroll');
history.back();
App.set('destroyCurrentView',false);
setTimeout(function(){
App.set('destroyCurrentView',true);
}, 500);
}
});
App.MediaRoute = App.mainRoute.extend({
enter:function(){
App.set('destroyCurrentView',false);
this._super();
}
});