我希望能够为EmberJS内部的 View 设置和拆卸功能,在此示例中,我将说显示每5秒通过AJAX获取的日志,但这是我遇到的很多问题

我在这里创建了一个switchView方法,该方法将处理设置/拆卸事件,但是现在它不能使其自身无效以显示更新的信息。

Em.Application.create({

  wrapper: $('#content'),
  currentView: null,

  ready: function() {

    this._super();

    this.self = this;

    Em.routes.add('/log/', this, 'showLogs');
    Em.routes.add('*', this, 'show404');

  },

  switchView: function(name, view) {

    if (this.currentView) {
      $(document.body).removeClass('page-' + this.currentView.name);

      if (this.currentView.view.unload) {
        this.currentView.view.unload();
      }

      this.currentView.view.remove();
    }

    if (name) {
      $(document.body).addClass('page-' + name);
    }

    if (view.load) {
      view.load();
    }
    view.appendTo(this.wrapper);
    this.currentView = {name: name, view: view};
  }

});


var LogView = Ember.View.create({

  templateName: 'logs',

  logs: [],

  load: function() {
    var self = this;
    this.interval = setInterval(function() {
      self.fetchLogs.apply(self);
    }, 5000);
    this.fetchLogs();
  },

  unload: function() {
    clearInterval(this.interval);
  },

  fetchLogs: function() {
    var self = this;
    $.get('/logs', function(data) {
      self.logs = data.list;
    });
  }

});

最佳答案

我不清楚您要什么,但您应该研究willInsertElementdidInsertElementwillDestroyElement。这些都相对于 View 元素从DOM中的插入和删除而被称为。

10-07 14:29