ember.js:结合搜索和过滤

时间:2013-05-20 11:17:52

标签: 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")

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

1 个答案:

答案 0 :(得分:1)

来自官方文档

  

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”