如何显式重定向到自动生成的“错误”路由?
How can I explicitly redirect to an automatically-generated `error` route?
看来我可以明确地 visit/redirect 到自动创建的 loading
路线,而不是 error
路线。这有什么理由吗?或者解决方法?
"auto-created",我的意思是我已经创建了加载和错误模板,但还没有明确创建路由或在路由器中定义它们。 Ember docs explain that this will create a loading route, and 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 到错误页面(无需明确定义错误路由)。由于您没有使用参数,因此它是什么并不重要。在 link-to 中添加第二个参数适用于您的示例:{{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);
看来我可以明确地 visit/redirect 到自动创建的 loading
路线,而不是 error
路线。这有什么理由吗?或者解决方法?
"auto-created",我的意思是我已经创建了加载和错误模板,但还没有明确创建路由或在路由器中定义它们。 Ember docs explain that this will create a loading route, and 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 到错误页面(无需明确定义错误路由)。由于您没有使用参数,因此它是什么并不重要。在 link-to 中添加第二个参数适用于您的示例:{{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);