ember.js - 如何显式重定向到自动生成的 `error` 路由?

标签 ember.js

看来我可以显式访问/重定向到自动创建的加载路线,但不能访问/重定向到错误路线。这有什么原因吗?或者有什么办法可以解决这个问题?

“自动创建”是指我已经创建了加载和错误模板,但没有显式创建路由或在路由器中定义它们。 Ember docs解释这将创建一个加载路线,并且 implies (but does not explicitly state)对于错误路由也应该如此。

我看到的错误看起来好像路线不存在:

DEBUG: -------------------------------
vendor.js:28585DEBUG: Ember      : 1.8.1
vendor.js:28585DEBUG: Ember Data : 1.0.0-beta.12
vendor.js:28585DEBUG: Handlebars : 1.3.0
vendor.js:28585DEBUG: jQuery     : 1.11.2
vendor.js:28585DEBUG: -------------------------------
vendor.js:28585Error: Assertion Failed: The URL '/error' did not match any routes in your application
    at new Error (unknown source)
    at Error.EmberError (http://0.0.0.0:4200/assets/vendor.js:27463:23)
    at Object.assert (http://0.0.0.0:4200/assets/vendor.js:17077:15)
    at http://0.0.0.0:4200/assets/vendor.js:39714:17
    at tryCatch (http://0.0.0.0:4200/assets/vendor.js:60519:16)
    at invokeCallback (http://0.0.0.0:4200/assets/vendor.js:60531:17)
    at http://0.0.0.0:4200/assets/vendor.js:62430:13
    at http://0.0.0.0:4200/assets/vendor.js:42647:9
    at http://0.0.0.0:4200/assets/vendor.js:13891:18
    at Object.flush (http://0.0.0.0:4200/assets/vendor.js:13961:15)
vendor.js:17077Uncaught Error: Assertion Failed: Error: Assertion Failed: The URL '/error' did not match any routes in your application

但它被列为可用路线:

Ember.keys(Onboarding.Router.router.recognizer.names)
["loading", "error", ..., "index", "application"]

尽管如此,显式地将其添加到路由器中:

Router.map(function() {
  ...
  this.route("error");
});

确实解决了问题。

我是不是做了什么蠢事?或者这是有意的行为?

编辑:

JSBin 来说明差异:http://emberjs.jsbin.com/yicijayiri/2/edit?html,js,output

最佳答案

我遇到了同样的问题,并在以下位置找到了有用的提示:http://discuss.emberjs.com/t/error-route-must-now-be-explicitly-included-in-router-intended-behavior/6943

经过测试,这让我了解到,在您的示例中,您可以通过添加预期参数来链接到错误页面(无需显式定义错误路由)。由于您没有使用该参数,因此它是什么并不重要。在链接到中添加第二个参数适用于您的示例:{{link-to "error page""error""A string"}}

以下是一些可能有用的附加信息。如果您希望转换到错误路由,如果您传递第二个参数,它的工作原理类似。

this.transitionTo('error', 'Error'); // OR
this.intermediateTransitionTo('error', 'Error');

现在,如果您想在错误消息中使用参数,您可以使用如下错误模板:

<script type="text/x-handlebars" id="error">
    <h1>{{name}}</h1>
    <p>{{message}}</p>
</script>

使用此模板,当您使用transitionTo 或intermediateTransitionTo 时,您需要传递一个错误对象作为参数: this.transitionTo('error', new Error('My custom error message.'));

此外,如果您还想传递唯一的错误名称,您可以这样做:

var errorObj = new Error('My customer error message');
errorObj.name = 'Custom Error';
this.transitionTo('error', errorObj);

关于ember.js - 如何显式重定向到自动生成的 `error` 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889287/

相关文章:

python - 更多 Django 静态 404 问题 - 与 ember 配对

bdd - 如何在 Emberjs 上对 View 绑定(bind)和模板进行单元测试?

javascript - 将数组嵌入对象传递到动态表单的 ember.js 路由时遇到问题

javascript - Ember-cli 验收测试在 await click() 时超时;单位错误 : Uncaught (in promise) Error: pushFailure()

javascript - 运行测试时出现 EmberJS 全局错误

javascript - Ember Simple Auth - 如何更新存储的 token

javascript - EmberJS - 注册预编译的 Handlebars 模板

ember.js - Ember JS::Uncaught TypeError:对象App.Router没有方法 'map'

ember.js - 我可以隐藏 URL 中的查询参数吗?

javascript - Foundation 5 下拉菜单在可滚动表格行中未对齐