Ember很新,所以也许有人可以帮助我。我一直在遇到这个错误并且不知道如何解决它。
Ember : 2.5.1
Ember Data : 2.5.3
以下是我的router.js
。
//app/router.js
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: config.locationType
});
Router.map(function() {
this.route('organization', {path: '/organization/:id'}, function(){
this.route('about', { path: '/about' });
this.route('admin', { path: '/admin' }, function(){
this.route('team', { path: '/team/:team_id' });
});
});
});
organization/:id/about
和organization/:id/admin
路由正常。但是当我尝试加载organization/:id/admin/team/:team_id
路由时,会抛出错误。以下是routes/organization/admin/team.js
文件:
//app/routes/organization/admin/team.js
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
let organization = this.modelFor('organization');
return organization.get('team');
}
});
不确定我应该发布哪些其他信息,因此请询问您认为有必要帮助调试的任何其他信息。我的猜测是它非常简单,而且我完全没有注意到它。
修改
我已经添加了几个文件来帮助诊断问题:
//app/routes/organization.js
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.findRecord('organization', params.organization_id)
}
});
//app/routes/organization/admin.js
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
changeValue(){
this.currentModel.save();
}
}
});
currentModel
是organization
路线的模型。我暂时删除了organization.admin.team
模型钩子,只是测试一个
{{#link-to 'organization.admin.team' model.team.id}} Team {{/link-to}}
在我传递organization.admin
的{{1}}模板中呈现的组件中。但是现在我在渲染model=model
模板时在Javascript控制台中得到了同样的错误(断言失败:你需要将模型名称传递给商店的modelFor方法)。
答案 0 :(得分:1)
如果您将Object传递给{{#link-to}}
助手。它会跳过模型钩子。所以你基本上可以发送{{#link-to 'team' organization.team}}
而不必写"模型"钩。
"它是有意义的,它可能会保存对服务器的请求,但诚然,它不直观。一个巧妙的方法是传入,而不是对象本身,但它的身份和#34; - https://www.toptal.com/emberjs/the-8-most-common-ember-js-developer-mistakes"。
所以你应该做
HBS
{{#link-to 'team' organization.team.id}} Link to team management {{/link-to}}
路线
model(params) {
return this.store.findRecord('team', params.team_id)
}
答案 1 :(得分:0)
您可以使用modelFor(' parent')方法来获取组织模型。 像那样
//应用程序/路由/组织/管理/ team.js 从' ember';
导入Emberexport default Ember.Route.extend({
model(params) {
let organization = this.modelFor('parent');
return this.store.findRecord('team', params.team_id)
}
});
我想你想做那样的事情。 基本上ember不支持嵌套路由。