这是一个我不确定如何回答的问题,我有一个这样的嵌套路线:
Router.map(function() {
this.resource('pages', function(){
this.resource('page', { path: '/:id' }, function(){
this.route('edit', function(){
this.resource('images', function(){
this.resource('image', { path: '/:id'}, function(){
this.route('edit');
})
});
});
});
});
});
但问题是,我不知道我的修改路线(this.route('edit', function(){})
)应该是route
还是resource
。
因为在我的应用中,我会像这样导航: (让我们把页面的id 1和图像的2)
/pages/
=> /pages/1/
=> pages/1/edit
=> /pages/1/edit/images
=> /pages/1/edit/images/2
但有一个问题是当我像这样设置{{link-to}}
时:
page = this.modelFor(' page');
{{#each item in model}}
{{#link-to "image" page item}}
{{list-row item=item}} //component to display row in a table
{{/link-to}}
{{else}}
{{no-items}}
{{/each}}
我的链接列表如下:
/pages/1/edit/images/1
/pages/2/edit/images/2
/pages/3/edit/images/3
就像页面ID使用与图片相同的ID,我不明白这是怎么回事:/
[编辑]:
当我点击/images/
内的图片时,它会进行两次转换,我在控制台中将其作为调试:
Rendering image with default view <webmob@view:default::ember844> Object {fullName: "view:image"}
vendor.js:28547 Could not find "image.index" template or view. Nothing will be rendered Object {fullName: "template:image.index"}
vendor.js:28547 Transitioned into 'pages.page.edit.images.image.index'
vendor.js:28547 Could not find "images.index" template or view. Nothing will be rendered Object {fullName: "template:images.index"}
vendor.js:28547 Transitioned into 'pages.page.edit.images.index'
[edit2]:
在我为我的网页创建了文件夹后(我对这些路线发出了相同的警告),它给了我这个:
Could not find "pages" template or view. Nothing will be rendered Object {fullName: "template:pages"}
vendor.js:28547 Rendering pages.index with default view <webmob@view:default::ember518> Object {fullName: "view:pages.index"}
vendor.js:28547 Transitioned into 'pages.index'
[edit3]:这是我的app结构如下所示的控制台输出:
- templates/
- pages.hbs
- page.hbs
- //other resources
generated -> route:pages.index Object {fullName: "route:pages.index"}
webmob/routes/pages.js:12 DEBUG: Already log in
VM69786:161 Ember Inspector Active
vendor.js:28547 Rendering application with default view <webmob@view:toplevel::ember480> Object {fullName: "view:application"}
vendor.js:28547 Rendering pages with default view <webmob@view:default::ember489> Object {fullName: "view:pages"}
vendor.js:28547 generated -> controller:pages.index Object {fullName: "controller:pages.index"}
vendor.js:28547 Could not find "pages.index" template or view. Nothing will be rendered Object {fullName: "template:pages.index"}
vendor.js:28547 Transitioned into 'pages.index'
vendor.js:28547 generated -> route:page.index Object {fullName: "route:page.index"}
我的一切都很好,但总是有警告。当我创建这样的页面文件夹时:
- templates/
- pages/
- index.hbs //empty file
- pages.hbs
- page.hbs
- //other resources
我在我的控制台中有这个:
generated -> route:pages.index Object {fullName: "route:pages.index"}
webmob/routes/pages.js:12 DEBUG: Already log in
vendor.js:28547 Rendering application with default view <webmob@view:toplevel::ember419> Object {fullName: "view:application"}
vendor.js:28547 Rendering pages with default view <webmob@view:default::ember428> Object {fullName: "view:pages"}
vendor.js:28547 generated -> controller:pages.index Object {fullName: "controller:pages.index"}
vendor.js:28547 Rendering pages.index with default view <webmob@view:default::ember443> Object {fullName: "view:pages.index"}
vendor.js:28547 Transitioned into 'pages.index'
vendor.js:28547 generated -> route:page.index Object {fullName: "route:page.index"}
VM70411:161 Ember Inspector Active
答案 0 :(得分:1)
在我的一个项目中,我偶然发现了类似的问题。我刚检查了我的源代码:
// Routing map
App.Router.map( function() {
this.resource('projects', function() {
this.resource('project', {path: ':name'}, function() {
this.resource('edit', function() {
this.resource('type', {path: '/type/:type_name'});
});
});
});
});
我可以使用/projects/MyNewProject/edit/type/RandomType
访问和编辑项目内的类型(因为我使用的是我的类型&#39;名称,而不是他们的ID)。
我记得注意到与您完全相同的行为:如果我在:name
和project
资源中使用type
,则生成的链接类似于/projects/MyNewProject/type/MyNewProject
。因此,为:id
和page
资源设置相同的image
参数可能是导致问题的原因。您可以针对:image_id
资源尝试使用image
,并为:id
资源添加page
。
关于您问题的其他方面,关于您是否应该使用route
或resource
作为第一个edit
路线:Ember Routing guide表示&#34;您应该将this.resource用于表示名词的URL,将this.route用于表示修饰这些名词的形容词或动词的URL。&#34;
但是在你的例子中它似乎并不那么简单,因为你有一个&#34;资源&#34;路由嵌套在&#34;动作&#34;路线。我认为你应该使用resource
,因为路线的终点(图像)是一种资源。