在转换时未触发Ember加载状态

时间:2018-01-31 21:41:05

标签: ember.js loading

如果我在具有慢模型挂钩的路由上使用transitionTo,则load.hbs状态永远不会被触发(我在所有级别都有loading.hbs文件 - cluster,cluster.schedule和cluster.schedule.preview_grid )。我尝试在cluster.schedule preview_grid-loading.hbs重命名一个没有运气。

在transitionTo上,没有传入模型或模型ID,只有路径:

viewPreviewGrid: function() { this.transitionTo('cluster.schedule.preview_grid'); },

我还有一个加载动作,定义如下:

loading(transition) {
    var controller = this.controller;
    if (!Ember.isNone(controller)) {
        this.controller.reset();
    }
    transition.promise.finally(function() {
        NProgress.done();
    });
}

在转换期间,调用页面只停留在上一个路径上,直到模型挂钩中的promise解析,然后转换到另一个路径。如果我刷新页面,加载状态会被触发就好了。这是transitionTo的已知行为吗?

这是我的模型钩子:

model: function (/*params*/) {
var socialProfile = this.modelFor('cluster.schedule').get('firstObject');

if (!socialProfile.get('isInstagram')){
  throw new Error("Attempted to access preview with non-ig profile: " + socialProfile.get('id'));
}

var accessToken = socialProfile.get('token');

var self = this;

return Ember.RSVP.hash({
  igPosts: new Ember.RSVP.Promise(function(resolve) {
    self.getUsersRecentMedia(accessToken).then(function(response) {
      var igPosts = Ember.A([]);
      response.data.forEach(function(data) {
        igPosts.pushObject(self.igPostFromResponse(data, socialProfile));
      });

      resolve(igPosts);
    });
  }),
  posts: new Ember.RSVP.Promise(function(resolve) {
    self.store.query('gram', { type: 'preview', social_profile_id: socialProfile.get('id'), limit: self.get('postLimit') }).then(function(grams) {
      var filteredGrams = grams.filter(function(gram) {
        return (gram.get('scheduledInFuture')) && (gram.belongsTo('socialProfile').id() === socialProfile.get('id')) && (gram.get('active'));
      });

      resolve(filteredGrams);
    });
  }),
  igUser: new Ember.RSVP.Promise(function(resolve) {
    self.getSelf(accessToken).then(function(response) {
      resolve(self.igUserFromResponse(response.data, socialProfile));
    });
  })
});

},

1 个答案:

答案 0 :(得分:0)

您需要在return true挂钩的末尾loading()告诉Ember继续显示默认加载路由(loading.hbs)。

loading(transition) {
  var controller = this.controller;
  if (!Ember.isNone(controller)) {
    this.controller.reset();
  }

  transition.promise.finally(function() {
    NProgress.done();
  });

  return true;
},