Расписание для каждого afterRender для просмотра

Я хотел бы запускать код каждый раз, когда представление отображается. Самое близкое, что я могу получить - это прослушать каждое свойство, которое может измениться, и явно запланировать что-то в цикле выполнения для afterRender, но я бы хотел иметь такой же жизненный цикл, как afterRender, Подход с использованием свойств становится хрупким, поскольку необходимо постоянно обновлять список свойств в зависимости от того, что может повлиять на рендеринг.

контроллер:

App.IndexController = Ember.Controller.extend({
  count: 0,
  actions: {
    add: function() {
      var count = this.get('count');
      count += 1;
      this.set('count', count);
    }
  }
});

Посмотреть:

App.IndexView = Ember.View.extend({
  changed: function() {
    Ember.run.scheduleOnce('afterRender', this.after);
  }.observes('controller.count'),
  after: function() {
    console.log('after render', this.$('span').text());
  }
});

Шаблон:

<button {{action "add"}}>add</button> <span>{{count}}</span>

http://emberjs.jsbin.com/wujogejeso/3/edit?html,css,js,output

1 ответ

Чтобы запланировать код afterRender, вы можете использовать didInsertElement крюк жизненного цикла вместо вашего changed функция.

App.IndexView = Ember.View.extend({
  didInsertElement: function() {
    Ember.run.scheduleOnce('afterRender', this.after);
  },
  after: function() {
    console.log('after render', this.$('span').text());
  }
});
Другие вопросы по тегам