接收404时的EmberJS模型路线

Mar*_*dão 3 ember.js ember-data

(同样的文字也在EmberJS讨论区开放)

我有以下路线:

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

它接收以下路由器路径

...
this.route('edit', { path: ':id'}); // edit person
...
Run Code Online (Sandbox Code Playgroud)

这适用于现有人.当对象不存在时,API返回404,其中包含以下内容:

{"person": null}
Run Code Online (Sandbox Code Playgroud)

JS中发生错误" 加载路径时出错:未定义 ".

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

任何的想法?

Mar*_*dão 5

好吧,多亏了上面的2个答案,我找到了路由器的"错误"操作的解决方案,我将在下面介绍.

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

文档不是很好,但这是我实现的:

我写了一个通用的Route类,用"错误"动作进行扩展:

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

我希望每条路线都有"未找到"beheaviour,我写道和错误路线,如下所示(注意"错误"这个词自动取代"编辑",如同EmberJS的标准:

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

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

这转而写了一个错误视图,如下所示:

App.IndexCrmBusinessErrorView = Em.View.extend({
    templateName: "r404",
});
Run Code Online (Sandbox Code Playgroud)

我使用了标准的"r404"模板,但正如您所看到的,对于每种不同的对象类型,它可能是不同的模板.

"r500"路由在服务器错误(404除外)的情况下起作用.

我希望这对其他人有所帮助.