我应该在Ember.js中过滤Route或Controller中的记录吗?

我正在编写Code School的Ember.js课程,他们首先在控制器中使用过滤器方法,解释控制器用于装饰模型.但是在接下来的部分中,他过滤了Route中的记录,将方法链接到’store.findAll’.

我对Ember比较新,所以这很令人困惑.在第一个例子中,我们有一系列产品,我们想要过滤,以检索一组onSale产品,以便在索引模板中发布.我们在索引路线上检索了模型:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.findAll('product');
  }
});

然后,Route将产品发送到控制器,在那里我们可以装饰数据并将其减少到只有3个产品.

App.IndexController = Ember.ArrayController.extend({
  onSale: function() {
    return this.filterBy('isOnSale').slice(0,3);
  }.property('@each.isOnSale')
});

我明白这一点.但随后我们创建了一个指向’products / onsale’模板的链接,该模板将列出所有onsale产品.我们创建了一个ProductsOnsaleRoute,我们使用modelFor从ProductsRou​​te中提取父模型,然后我们继续在Route中过滤而不是创建ProductsOnsaleController并在那里过滤.对此有解释吗?

App.ProductsOnsaleRoute = Ember.Route.extend({
  model: function() {
    return this.modelFor('products').filterBy('isOnSale');
  }
});

我想我的问题是……对我来说创建一个ProductsOnsaleController并在那里过滤会更好吗?

App.ProductsOnsaleController = Ember.ArrayController.extend({
  sale: function() {
    return this.filterBy('isOnSale');
  }
}):

谢谢你的帮助!

解决方法

巧合的是,我今天和我的团队负责人正在谈论这个话题.他提出了一个非常有效的观点,即在Route级别过滤的麻烦在于它不是“绑定意识”.

假设您决定过滤确定是否应显示项目的属性.如果在控制器级别执行过滤,则用户操作可以从显示删除项目.如果您的过滤是在路由的setupController中完成的,则不是这样;你必须重新审视要删除的项目的路线.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...