Ember 加载状态未在 transitionTo 上触发

Ember loading state not triggered on transitionTo

如果我在带有慢模型挂钩的路由上使用 transitionTo,loading.hbs 状态永远不会被触发(我在所有级别都有 loading.hbs 文件 -- 集群,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();
    });
}

在 transitionTo 调用页面只停留在之前的路线上,直到模型钩子中的承诺解决,然后它转换到另一条路线。如果我刷新页面,加载状态就会被触发。这是 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));
    });
  })
});

},

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

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

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

  return true;
},