0

拥有这个控制器:

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")

问题是,当我应用搜索时,我失去了之前定义的排序。我能做什么?

4

1 回答 1

1

来自官方文档

Ember.SortableMixin为数组代理提供一个标准接口,以指定排序顺序并在添加、删除或更新对象时保持这种排序,而不更改其底层内容数组的隐式顺序:

Ember.SortableMixin只关心content数组,而我们确实得到了,在这里你正在尝试做filteredContent混入不关心的事情;不关心!

因此,我建议您将content取决于所选搜索的 as 计算属性设置如下,

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”排序

于 2013-05-20T13:43:22.183 回答