<!DOCTYPE html>
<html>

  <head>
    <script data-require="underscore.js@*" data-semver="1.8.3" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
    <script data-require="jquery@*" data-semver="2.2.0" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <script data-require="backbone.js@*" data-semver="1.1.2" src="    //cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
    <script data-require="marionette.js@*" data-semver="2.2.2" src="https://cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.2.2/backbone.marionette.js"></script>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <div id="container"></div>
    <script src="script.js"></script>
  </body>

</html>
var model = new Backbone.Model()

var View = Marionette.ItemView.extend({
  template: _.template("<div>Initial view</div>"),
  model: model,
  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);
  }
})

var view = new View()

document.querySelector("#container").appendChild(view.render().el)


setTimeout(function () {
  model.destroy()  
}, 2000)
div.destroying {
  background-color: red;
}