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.SortableMixinget を実行している間は配列のみを気にします。ここでは、mixin が気contentにしない get を実行しようとしています。filteredContent

したがって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」によってソートされます。

于 2013-05-20T13:43:22.183 に答える