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

标签 javascript jquery backbone.js marionette

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

_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 中,删除模型/集合时 View 都不会自动删除。您可以利用这一事实以您想要的任何方式为您的 View 添加动画效果。这是一个例子:

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);
  }
})

我创建了一个short demo在plunkr上,所以你可以自己检查一下。
可以对 Backbone 的 CollectionView/CompositeView(现已弃用)/等执行相同的操作。

关于javascript - 如何在删除模型 :backbone. js 和 marionettejs 时使用另一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625699/

相关文章:

javascript - Rethinkdb Append 说属性不存在

javascript - 从 typescript 编译后未处理的 promise 拒绝

jquery - 获取更改时的单选按钮值不起作用

backbone.js - 触发事件后复选框仍未选中

javascript - Backbone.js - 从 url 返回 JSON

Java REST Api(运行在tomcat上)-在客户端和服务器之间实现实时同步的最简单方法

javascript - 如何使用 AngularJS 显示按钮或 anchor 标记值?

javascript - 访问 Angular 6 中的嵌套数组

php - 使用 jquery ajax 发送数组

javascript - 第二次单击按钮时切换反向动画