有这个控制器:
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"进行排序