Установка и удаление (и самостоятельная аннулирование) EmberJS Views - PullRequest
3 голосов
/ 20 декабря 2011

Я хотел бы иметь возможность настраивать и отключать функции для представлений внутри EmberJS, для этого примера я скажу, что отображение журналов, которые выбираются через AJAX каждые 5 секунд, но это проблема, с которой я сталкиваюсь довольно часто

Я создал здесь метод switchView, который будет обрабатывать события setup / teardown, однако сейчас он не может сделать себя недействительным для отображения обновленной информации.

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

});

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Я не на 100% ясно понимаю, о чем вы просите, но вы должны изучить willInsertElement, didInsertElement и willDestroyElement.Все они называются относительно вставки и удаления элемента вида из DOM.

0 голосов
/ 23 апреля 2012

Вы можете сделать это в конце RunLoop:

Ember.run.schedule('timers', function () {
   //update your widget
});

См. http://blog.sproutcore.com/the-run-loop-part-1/. Та же концепция присутствует в EmberJS

...