2014-05-16 61 views
3

(这相同的文字是EmberJS开放讨论区太)为模型EmberJS路由时收到404

我有以下途径:

App.IndexCrmPersonEditRoute = Ember.Route.extend({ 
    model: function(params) { 
     var person = this.store.find("person", params.id); 
     return person; 
    }, 
}); 

接收下列路由器路径

... 
this.route('edit', { path: ':id'}); // edit person 
... 

这对现有的人很好。当对象不存在,该API返回一个404具有以下内容:

{"person": null} 

错误“加载时出错路线:未定义”在JS发生。

我想知道,如果返回404 + person = null是正确的方法,并且可以显示消息并将用户重定向回前一个URL(或者如果响应为404,则不会移动它们)。

有什么想法?

+0

此外,Ember在每个资源下面设置了一条免费的错误路径...... http://emberjs.jsbin.com/OxIDiVU/488/edit,http:// emberjs。COM /引导件/路由/装载 - 和 - 差错子状态/#toc_code-错误码子状态与 - 动态段 – Kingpin2k

回答

5

好了,多亏了2个回答上面,我发现与路由器的“错误”的行动方案,这是我在下面说明。

http://emberjs.com/guides/routing/loading-and-error-substates/#toc_code-error-code-substates-with-dynamic-segments

该文档是不是很好,但这里是我做了什么来实现:

我写了一个通用路由类与“错误”行为进行扩展:

App.NotFoundObjectRoute = Ember.Route.extend({ 
    actions: { 
     error: function(reason, transition) { 
      if (reason.status == 404) 
       return true 
      else 
       this.transitionTo('r500'); 
     }, 
    }, 
}); 

我希望每条路线都有“Not found”beheaviour,我写道和Error route,如下(注意自动替换“Edit”的单词“Error”,如EmberJS的标准:

App.IndexCrmPersonEditRoute = App.NotFoundObjectRoute.extend({ 
    // ... 
}); 

App.IndexCrmPersonErrorRoute = Ember.Route.extend({ 
    // Called for errors like 404 (not found) and 500 (server error) 
}); 

这转身也写一个错误观点,如下:

App.IndexCrmBusinessErrorView = Em.View.extend({ 
    templateName: "r404", 
}); 

我用的是标准的“R404”的模板,但你可以看到它可能是一个不同的每个不同的对象类型。

“r500”路由在发生服务器错误时(404以外)发挥作用。

我希望能对别人有所帮助。

2

1)如果模型钩子中的承诺失败,交易将不会完成。所以,你不需要交易回来。

2)您可以管理您的路由错误处理程序中的错误。

3)您的回复不需要{person:null},只要提供状态码404就足够了。在这种情况下,您的ajax承诺将失败,因为您返回一个http错误代码。

http://emberjs.jsbin.com/kimol/1/edit