我是ember.js的新手,我尝试在App.Router.map
中为我的应用程序设置路由/资源,但是我在提出最有效/干扰方面遇到了一些麻烦定义应用程序所需路由的方法。
我希望有一个资源items
,它是进入应用程序时的默认路径,它显示一个由动态细分:bucket
过滤的项目列表,必须是一组预定义的存储桶名称。即#/items/foo
或#/items/bar
,其中foo
和bar
是有效的:bucket
值。
此外,items
路由还应允许第二个段tag
,然后必须跟随另一个动态段,该段是标记名称的url-safe版本,即{{1 }}
我的第一部分工作,使用:
#/items/tag/my-tag
但是,我无法弄清楚如何在那里放置App.Router.map(function() {
this.resource('items', {path: '/items/:bucket'});
});
版本的路线。我已经尝试将它嵌套在tag
资源中,也作为自己的顶级资源,但都不起作用。
答案 0 :(得分:2)
您可以像这样构建路由器:
App.Router.map(function() {
this.resource('items', {path: '/items'}, function(){
this.route('bucket', {path: '/:bucket'});
this.route('tag', {path: '/tag/:tag'});
});
});
这会显示Item
处的所有#/items
,并按#/items/bucketNameHere
处的存储区和#/items/tag/tagNameHere
处的标记进行过滤。
如果所有项目都显示在ItemRoute
:
App.ItemsRoute = Ember.Route.extend({
model: function(){
return this.store.find('item');
}
});
然后,您可以在ItemsBucketRoute
和ItemsTagRoute
:
App.ItemsBucketRoute = Ember.Route.extend({
model: function(params){
console.log("model fired");
return this.modelFor('items').filterProperty('bucket', params.bucket);
}
});
App.ItemsTagRoute = Ember.Route.extend({
model: function(params){
return this.modelFor('items').filterProperty('tag', params.tag);
}
});
您还可以完成列表过滤using the filterProperty
of arrayController
s。