我现在正在开发一个 ember js 应用程序,并且有一个路由结构如下的应用程序:
App.Router.reopen({
rootURL: '/gui/'
});
App.Router.map(function() {
this.route("about", { path: "about"})
this.resource("tenant", { path: ":id" }, function() {
this.resource("dossier", { path: "dossiers/:id"}, function() {
this.resource("resource", { path: "resources/:id"}, function() {
this.resource("service", { path: "services/:id"});
});
});
})
});
现在,在最深层的模型(服务)上,当我尝试通过键入 URL 来加载服务时,它会失败。所以,如果我去,例如,
http://localhost:8080/gui#/8080/dossiers/8080/resources/8080/services/8080
我得到一个错误:
Assertion failed: Cannot call get with 'id' on an undefined object.
我想,也许是我生成模型的代码有问题,但我把所有代码都去掉了,把模型作为一个裸函数,只是为了看看,它仍然给出这个错误。但是,如果我完全从路线中删除模型代码,它将加载页面而不会抱怨。所以这:
App.ServiceRoute = Ember.Route.extend({
model: function(params) {},
renderTemplate: function() {
this.render('service', {
into: 'application'
});
this.render()
}
});
引发错误。与原始代码一样:
App.ServiceRoute = Ember.Route.extend({
model: function(params) {
tenantModel = this.modelFor('tenant');
dossierModel = this.modelFor('dossier');
resourceModel = this.modelFor('resource');
dossier_url = "/api/" + tenantModel.id + "/dossier/" + dossierModel.tag
url = dossier_url + "/resources/" + resourceModel.name + "/services/" + params.id
return jQuery.getJSON(url).then(function(data){
data
});
},
renderTemplate: function() {
this.render('service', {
into: 'application'
});
this.render()
}
});
但是,如果我像这样取出模型:
App.ServiceRoute = Ember.Route.extend({
renderTemplate: function() {
this.render('service', {
into: 'application'
});
this.render()
}
});
然后错误消失。
这是最奇怪的部分。
如果我加载不同的页面,然后导航到服务页面......它可以工作。它加载模型就好了。只是如果我尝试刷新页面,或者将服务的 url 直接放入浏览器,它就会出错。
我阅读了有关此错误的各种互联网帖子,但似乎没有一个与我所看到的情况相匹配 - 尝试调整这个和那个,仍然没有。有任何想法吗?