如何在删除模型时使用另一个模板:backbone.js & marionettejs

how to use another template while removing model :backbone.js & marionettejs

我正在尝试加载另一个模板并在使用 model.destroy() 删除我的 DOM 元素时应用动画。 如答案之一所述 我正在使用类似下面的东西

_onCollectionRemove: function(model) {
           var view = this.children.findByModel(model);
           view.template = require('handlebars').compile(require('myTemplatePath'));
           view.render();
           view.$el.fadeToggle(300, 'linear'); // For animation
           var func = _.bind(function() {
                this.removeChildView(view);
                this.checkEmpty();
            }, this);
            setTimeout(func, 300);
        }

但是当 _onCollectionRemove 调用我想要删除的旧模板时,而不是新模板。

在 Backbone 或 Marionette 中,删除模型/集合时视图不会自动删除。您可以使用此事实以您想要的任何方式为您的视图设置动画。这是一个例子:

var View = Marionette.ItemView.extend({
  template: _.template("<div>Initial view</div>"),
  modelEvents: {
    "destroy": "startDestroying"
  },
  startDestroying: function () {
    this.template = _.template("<div class='destroying'>Destroying view</div>")
    this.render()
    var opacity = 1
    var interval = setInterval(function () {
      opacity -= 0.1
      this.el.style.opacity = opacity
      if (opacity <= 0) {
        window.clearInterval(interval)
        this.remove()
      }
    }.bind(this), 100);
  }
})

我在 plunkr 上创建了 short demo,您可以自行查看。
可以对 Backbone 的 CollectionView / CompositeView(现已弃用)等执行相同操作