簡體   English   中英

灰燼之后渲染器不等待承諾

[英]Ember afterRender not waiting for promises

我想知道何時所有內容都已首次渲染,但是Ember.run.scheduleOnce('afterRender'還不夠,因為模板中有承諾。

{{#each entity in model.entities}}
  {{entity.anotherEntity.name}}
{{/each}}
{{!-- more like above --}}

其中entitiesanotherEntities是異步關系和承諾。 afterRender在內部內容呈現之前命中。 我當前的解決方案是:

Ember.run.scheduleOnce('afterRender', this, function() {
  Ember.RSVP.all([
    this.model.get('entities').then(function(entities) {
      return Ember.RSVP.all(entities.map(function(entity) {
        return entity.get('anotherEntity');
      }));
    }),
    // more like above
  ]).then(function() {
    console.log('done-rendering');
  });
});

有更好的方法嗎? 這甚至可能還不夠,因為在最后一個承諾解析到模板渲染的最后一部分之間可能會有瞬間的間隔。 在所有的承諾都確定afterRender之后,也許我需要另一個afterRender或類似的檢查。

如果要使用afterRender隊列, afterRender在完成工作之后但在呈現工作之前計划調用。 這意味着在您的諾言得到解決之前調用它可能會涉及時間問題(如您所指出的)。 如果我是您,我會您的承諾解決安排電話。

this.model.get('entities').then(function(entities) {
    return Ember.RSVP.all(entities.map(function(entity) {
        return entity.get('anotherEntity');
    });
}).then(function() {
    Ember.run.scheduleOnce('afterRender', this, function() {
        // Your work is finished
        // You can now schedule more work for after rendering
    });
});

不幸的是,我不知道有比這更優雅的方法。 通常, afterRender隊列並不經常使用(我僅在將第三方庫包裝在組件中時才使用它),因此沒有理由使其更易於使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM