关闭Backbone Marionette视图的动画

时间:2013-07-09 12:14:39

标签: backbone.js marionette backbone-views

我希望我的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();
}

到目前为止工作得很好。
如果你有任何想法,想听听 感谢。

1 个答案:

答案 0 :(得分:0)

我需要这样的东西,并提出或多或少相同的解决方案。

它有效,但我不喜欢两件事: 1)它专门用于关闭视图。一个更通用的动画解决方案会很好。 2)如果一个人使用CSS动画(通过交换类)并且他们改变了css中的时间,那么他们需要手动更新promises(这会对大型应用程序造成混乱)。

我认为AngularJS处理动画的方式运作良好,有效地解决了上述两个问题。但也许它不适合Marionette / Backbone unopinionated风格...