Ember.js:结合搜索和过滤



有这个控制器:

App.ProductsController = Ember.ArrayController.extend Ember.PaginationMixin,
  sortProperties: ["number"]

我想添加"搜索"功能,以这种(工作)方式

App.ProductsController = Ember.ArrayController.extend Ember.PaginationMixin,
  sortProperties: ["number"]
  search: ''
  filteredContent: (->
    search = @get("search")
    @get("content").filter (item)->
      name = item.get("name").toLowerCase()
      name.match(search.toLowerCase())
  ).property("submittedSearch")
  filterContent: ->
    @set "submittedSearch", @get("search")

问题是,当我应用我的搜索时,我失去了我之前定义的排序。我该怎么办呢?

来自官方文档

Ember.SortableMixin提供了标准接口数组代理来指定排序顺序,并在对象的添加、删除或更新而不更改其底层内容数组的隐式顺序:

Ember.SortableMixin只关心content数组,而我们做得到,这里你试图在filteredContent上做得到,而mixin并不关心!

所以我建议你把content作为计算属性,这取决于所选择的搜索,如下所示,

App.ProductsController = Ember.ArrayController.extend Ember.PaginationMixin,
  sortProperties: ["number"]
  search: ''
  content: (->
    search = @get("search")
    @get('products').filter (item) ->
      name = item.get("name").toLowerCase()
      name.match(search.toLowerCase())
  ).property('submittedSearch')

在路由setupController中将主列表设置为控制器的products属性而不是content

App.ProductsRoute = Ember.Route.extend
  setupControllers: (controller, model) ->
    controller.set('products'), App.Products.find()

现在,您的content将通过ComputedProperty过滤,通过"mixin"进行排序

最新更新