2013-05-20 72 views
0

有此控制器: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") 

的問題是,當我應用我的搜索時,我正在失去之前定義的排序。我能做什麼?

+0

失去什麼的順序? –

+0

您使用哪個版本的燼? – intuitivepixel

+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,整理禮貌 「混入」

+0

只有一個小問題:'submittedSearch'變量的任何變化都不會觸發對'content'的重新計算。應用於另一個變量的相同代碼會觸發。 –

+0

你在做什麼內容?我的意思是在UI上顯示列表或你的用例是什麼? –

+0

我只是以通常的方式列出內容:'{{#each controller}} {{this.name}} {{/ each}}' –