我希望我的Marionette视图以动画形式关闭并等待动画完成,然后将其从DOM中删除。
(见解将受到高度赞赏)
我已经改写了Marionette.View以下列方式查看关闭方法:
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();
}
到目前为止工作得很好。
如果你有任何想法,想听听
感谢。
答案 0 :(得分:0)
我需要这样的东西,并提出或多或少相同的解决方案。
它有效,但我不喜欢两件事: 1)它专门用于关闭视图。一个更通用的动画解决方案会很好。 2)如果一个人使用CSS动画(通过交换类)并且他们改变了css中的时间,那么他们需要手动更新promises(这会对大型应用程序造成混乱)。
我认为AngularJS处理动画的方式运作良好,有效地解决了上述两个问题。但也许它不适合Marionette / Backbone unopinionated风格...