微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该在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中完成的,则不是这样;你必须重新审视要删除的项目的路线.

原文地址:https://www.jb51.cc/js/157951.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐