我在Ember.js(最新版本)中使用link-to
帮助器时遇到了相当烦人的问题。无论我做什么,我都会在URL中获得undefined
,这不仅看起来很愚蠢,而且无法刷新页面。我的模板中有以下内容:
{{#link-to 'organizations.organization.projects.index' this}}
Projects
{{/link-to}}
this
是对组织模型的引用。当我使用它时,Ember.js生成一个指向/organizations/undefined/organization.organization.projects
的链接。但是,如果我在链接上叮当作响,它仍然会将我带到解析模型的页面。当我用this
替换model
时会发生同样的事情。
但是,如果我将this
替换为id
,则其生成的链接是正确的:/organizations/ORG_1/organization.organization.projects
。但是当我点击该链接时,该网址不再显示ORG_1
,而是显示undefined
。但它仍然设法正确地解决了模型。
标识为ORG_1
的模型是有效模型。它不是未定义的,它不是null并且它已经完全加载。该模型没有任何问题,但Ember.js拒绝将其ID正确地放在URL中,但设法在模板中使用其数据就好了。
有没有人知道造成这种情况的原因是什么?
这是我的路由器,供参考。 (我知道,路由是深层嵌套的。这个应用程序将非常大。)
App.Router.map(function() {
// route('application')
// route('index') -- main dashboard
this.route('settings');
this.resource('organizations', function() {
// route('index') -- organization selector page
this.resource('organizations.organization', { path: '/:organizationId' }, function() {
// route('index') -- organization dashboard
this.resource('organizations.organization.projects', function() {
// route('index') -- project selector page
this.resource('organizations.organization.projects.project', { path: '/:projectId' }, function() {
// route('index') -- project dashboard
});
});
});
});
// Must be the last route to ensure no others match.
this.route('missing', { path: '*path' });
});
答案 0 :(得分:1)
this
上没有属性organizationId
,Ember从模型中抓取该属性。
您可以添加序列化挂钩以将organizationId
映射到id
App.OrganizationsOrganizationRoute = Em.Route.extend({
serialize:function(model){
return { organizationId: Em.get(model, 'id')};
}
})