0

関連コンテンツで一部のコンテンツをフィルタリングしようとしています。私が抱えている問題は、フィルタリングしようとしているときに、関連するコンテンツが必ずしも読み込まれていないことです。関数を使用してみましthen()たが、スコープ外の変数にアクセスできません。これが私が試したことです

var filter = this.get('categoryFilter').toLowerCase();
App.Category.find().then(function() {
 content = this.get('content').filter(function(item) {
   return item.get('category.name').toLowerCase() === filter;
   // ERROR! filter variable doesn't exist here
  }, this);
});

フィルタリングthen()は最初は失敗しませんが、データがすでにロードされているため、その後は毎回機能します。

リストをフィルタリングする最良の方法は何ですか?

4

1 に答える 1

1

filterProperty 関数を使用して RecordArray をフィルタリングできます: http://emberjs.com/api/classes/Ember.Enumerable.html#method_filterProperty

次のようなものを試してください:

var filteredCategories = App.Category.find().filterProperty('nameLowerCase', filter);

カテゴリでは、フィルターを実行するためのプロパティが必要です

App.Category = Ember.Object.extend({

  name: '',

  nameLowerCase: function() {
    return this.get('name').toLowerCase();
  }.property('name')

});

Categories コントローラーのモデルを App.Category.find() に設定する CategoriesRoute があると仮定すると、次のコードを使用して、テンプレートからフィルター処理されたリストにアクセスできます。

App.CategoriesController = Ember.Array.extend({

  filtered: function() {
    var filter = 'String value to compare lower case name to';
    return this.get('model').filterProperty('nameLowerCase', filter);

  }.property('model.@each.nameLowerCase')
});

次に、テンプレートで次を使用できます。

{{#each filtered}}
  //Your code here
{{/each}}

EDIT 06/06/2013 ... filterProperty が App.Category.find() で呼び出されるようになったことに注意してください

于 2013-06-05T10:42:44.443 に答える