EmberJS 模型挂钩:this.store.find returns 无数据。如何重定向到 404 页面?

EmberJS model hook: this.store.find returns no data. How do I redirect to a 404 page?

当我的路径 /map/:id 通过 this.store.find('location', route.id) 找不到任何值时,我想重定向到另一个页面而不是收到 "adapter's response did not have any data" 错误。它似乎在到达控制器之前就停止了处理。

我认为最好的方法是扩展 DS.FixtureAdapter 或 return 一个代理对象,直到 this.store.find 解析。我阅读了文档,它说要通过 findfindMany 挂钩等扩展 DS.FixtureAdapter。当我尝试时,似乎没有任何事件触发,而且我无法找到合适的替代 return 对象。我做错了什么?

this.store.find()returns一个承诺。 Promise 决议有 2 个结果:1. 好的和 2. 坏的。您可以将 2 个函数传递到 then() 方法中,以告知 promise 在每种情况下要做什么。

所以,假设您正在寻找一条记录,但它不存在(结果不佳),您可以告诉 ember 转换到另一条路线。

App.DudeRoute = Ember.Route.extend({
  model: function() {
    var route = this;
    return this.store.find('dude', 5).then(
      function(dude){
        return dude; 
      }, 
      function(error){
        route.transitionTo('nomansland');
      }); 
  }
});

另请注意,您需要创建一个 route 变量,因为在糟糕的场景中仅使用 this 是行不通的,因为 this 会获得一个新的上下文。

工作示例here