大家好,我有一堆图像,我想按“近期”或“热门”或“热门”进行排序 现在我的路线定义如下:
App.Router.map(function () {
this.route("browse");
});
我想做一些像浏览/近期这样的东西,以显示最近的图像和浏览/流行的流行但我不能嵌套的路线。
我应该更改我的代码,而不是浏览路线生病图片资源?
并嵌入我的过滤器?生病有点像图像/最近的图像/流行...
似乎太多的路线,未来可能有病10个过滤器,这意味着不得不创建10条不同的路线&控制器?我只是使用1个控制器并设置逻辑来过滤(使用余烬数据)?
答案 0 :(得分:1)
从资源开始,然后在其中嵌套路线,这是一种最佳做法。
App.Router.map(function() {
this.resource('images', { path: '/' }, function() {
this.route('browse');
this.route('hottest');
this.route('popular');
});
});
就创建十个不同的控制器而言,这是不必要的。我想象路线逻辑会有所不同(HottestRoute将加载最热门的照片,PopularRoute将加载最受欢迎的),但控制器逻辑应该是相同的。最好有命名控制器,但它们只能扩展已经定义的受控制。
App.ImagesPopularController = ImagesController.extend();
答案 1 :(得分:1)
您应该使用名词(images
)作为资源名称。然后,您可以创建多个路径,每个路径对您的数据应用不同的过滤器(不同的模型钩子),但每个路径使用相同的控制器/模板。一个简化的例子:
首先,创建一个图像资源,其中包含过滤器的各个路径:
App.Router.map(function() {
this.resource('images', function () {
this.route('hot');
this.route('new');
});
});
然后,创建一个共享路由,它将使用硬编码模板和控制器。需要setupController
的部分,因为默认控制器将是ImagesNew
或ImagesHot
的(可能是自动生成的)控制器。您必须使用给定的模型并使用它来设置共享ImagesController
。
App.ImagesRoute = Ember.Route.extend({
renderTemplate: function() {
this.render('images', {
controller: 'images'
});
},
setupController: function (_, model) {
this.controllerFor('images').set('content', model);
}
});
App.ImagesController = Ember.Controller.extend({
// your shared logic here
});
最后,您可以创建过滤路线。每个都应该继承基础ImagesRoute并在模型钩子中提供自己的过滤数据。
App.ImagesHotRoute = App.ImagesRoute.extend({
model: function () {
return this.store.getHotImages();
}
});
App.ImagesNewRoute = App.ImagesRoute.extend({
model: function () {
return this.store.getNewImages();
}
});
使用jsbin示例here。