マリオネット ビューをアニメーションで閉じて、アニメーションが終了するのを待ってから DOM から削除するようにしました。
(洞察は高く評価されます)
Marionette.View の close メソッドを次のように書き直しました。
close: function(){
if (this.isClosed) { return; }
// allow the close to be stopped by returning `false`
// from the `onBeforeClose` method
var beforeCloseReturnValue = this.triggerMethod("before:close");
if (beforeCloseReturnValue === false){
return;
}
if (IsObjectNullOrUndefined(beforeCloseReturnValue))
{
this.closeTheView();
return;
}
if (beforeCloseReturnValue.promise)
{
var _this = this;
$.when(beforeCloseReturnValue).done(function(){
console.log("view close done!");
_this.closeTheView();
});
}
},
closeTheView: function(){
// mark as closed before doing the actual close, to
// prevent infinite loops within "close" event handlers
// that are trying to close other views
this.isClosed = true;
this.triggerMethod("close");
// unbind UI elements
this.unbindUIElements();
// remove the view from the DOM
this.remove();
}
また、ビュー インスタンスには、onBeforeClose メソッドの次の実装が含まれています。
onBeforeClose: function(){
_this = this;
return $.Deferred(function(){
_this.$el.fadeOut(2000, dfd.resolve);
}).promise();
}
これまでのところ非常にうまく機能します。
それについて何か考えがあるかどうか聞きたかった.
ありがとう。