我想在出现错误加载模型时转换到“oops”路由。我的路由器看起来像:
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
export default
Router.map(function() {
this.resource('invitations', {path: '/invitations'});
this.resource('oops');
});
InivitationsRoute的错误操作定义为:
import Ember from 'ember';
export default
Ember.Route.extend({
actions: {
error: function(error, transition) {
if (error && error.status === 500) {
transition.abort();
this.transitionTo('oops',{'a':'b'});
}
// Return true to bubble this event to any parent route.
return false;
}
}
});
现在我遇到的问题是,如果我将一个对象传递给 this.transitionTo('oops',{'a':'b'}); ,那么ember不会甚至尝试进行转换,但如果我只是做了 this.transitionTo('oops'); ,它将转换到路线。问题是我想将错误JSON作为模型传递给此路由!
我的OopsRoute极简主义:
import Ember from 'ember';
export default
Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model);
}
});
似乎无法理解为什么它不起作用! 使用ember:1.11.3
答案 0 :(得分:1)
Ember认为您的{ "a":"b" }
是动态细分,因为您尚未指定oops资源的路径。
如果您将资源更改为this.resource("oops", { path: '/' }
,那么过渡将会起作用,但是您的数据仍然不会被视为模型,(我认为)会将{ "a":"b" }
对象视为queryParams来尝试找到一个模型。
由于您的oops路由实际上没有模型,只会用于显示错误消息(我假设),我会做一些事情,比如使用服务来保持路由之间的错误消息。类似的东西:
// services/error-messages.js
export default Ember.Service.extend({
errorMessage: null
});
// routes/invitations.js
export default Ember.Route.extend({
errorMessages: Ember.inject.service(),
actions: {
error: function () {
var errors = this.get("errorMessages") // the error-messages service
errors.set("errorMessage", "Something has gone wrong!");
}
}
});
// routes/oops.js
export default Ember.Route.extend({
errorMessages: Ember.inject.service()
setupController: function (controller, model) {
var errors = this.get("errorMessages");
controller.set("errorToDisplayInTemplate", errors.get("errorMessage");
}
});
// templates/oops.hbs
{{errorToDisplayInTemplate}}
然后,当你离开oops页面时,显然你想要null
出现服务中的错误消息。