Ember组织路线&资源?

时间:2014-06-08 13:30:29

标签: ember.js ember-data

大家好,我有一堆图像,我想按“近期”或“热门”或“热门”进行排序 现在我的路线定义如下:

App.Router.map(function () {
    this.route("browse");
});

我想做一些像浏览/近期这样的东西,以显示最近的图像和浏览/流行的流行但我不能嵌套的路线。

我应该更改我的代码,而不是浏览路线生病图片资源?
并嵌入我的过滤器?生病有点像图像/最近的图像/流行...
似乎太多的路线,未来可能有病10个过滤器,这意味着不得不创建10条不同的路线&控制器?我只是使用1个控制器并设置逻辑来过滤(使用余烬数据)?

2 个答案:

答案 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的部分,因为默认控制器将是ImagesNewImagesHot的(可能是自动生成的)控制器。您必须使用给定的模型并使用它来设置共享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