如果给出了无效的ID,则重定向

时间:2014-03-14 21:23:20

标签: ember.js router

我有以下路线

App.Router.map(function() {
  this.resource('gradebooks', function() {
    this.resource('gradebook', { path: ':gradebook_id' });
  });
});

App.GradebooksRoute = Em.Route.extend({
  model: function() {
    return this.store.find('gradebook');
  }
});

App.GradebookRoute = Em.Route.extend({
  model: function(params) {
    var id = params.gradebook_id;
    var gradebook = this.store.find('gradebook', id);
    var self = this;
    gradebook.then(null, function(reason) {
      self.transitionTo('gradebooks');
    });
    return gradebook; 
  }
})

模板:

<ul>
  {{#each}}

  <li {{bind-attr class="isActive:active"}}>
    {{#link-to "gradebook" this}}
      {{title}}
    {{/link-to}}
  </li>

  {{/each}}
</ul>

{{outlet}}

除非给出无效的ID,否则它的工作正常且花花公子。 (例如#/gradebooks/invalid_id)。

目前,重定向效果很好(我确实收到了错误Error while loading route: TypeError: Cannot read property 'id' of undefined,但仍然会重定向。但是,生成的成绩单列表在列表中的成绩单无效。

如果我手动导航到#/gradebooks/invalid_id_1#/gradebooks/invalid_id_2#/gradebooks/invalid_id_3等,则每次都会将无效成绩单添加到成绩单列表中。

任何想法为什么?或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

而不是手动处理find模型承诺最好让ember这样做,如果找到它会触发错误事件 承诺被拒绝

App.GradebookRoute = Em.Route.extend({
  model: function(params) {
    var id = params.gradebook_id;
    return this.store.find('gradebook', id);
  },
  actions: {
    error: function(reason) {
      alert(reason); // "FAIL"

      // Can transition to another route here, e.g.
      // transitionTo('gradebooks');

      // Uncomment the line below to bubble this error event:
      // return true;
    }
})

更多信息http://emberjs.com/guides/routing/asynchronous-routing/