ArrayController内のオブジェクトの子レコードをフィルタリングできませんでした。
私のモデルの構造は次のようになります。
var Shop = DS.Model.extend({
name: DS.attr('string'),
products: DS.hasMany('product')
});
var Product = DS.Model.extend({
name: DS.attr('string'),
shop: DS.belongsTo('shop')
});
ショップには多くの商品があり、商品はショップに属しています。Ember.TextFieldに基づいて各親の子レコードをフィルタリングしたいと思います。正規表現を使用して、所有するプロパティに基づいて親レコードのみをフィルタリングする場合、フィルタリングは機能します。
productSearchResults: function() {
var productSearchTerm = this.get('productSearchTerm');
var regExp = new RegExp(productSearchTerm,'i');
Ember.Logger.log('productSearchTerm', productSearchTerm);
var filteredResults = this.map(function(shop){
var products = shop.get('products');
return products.filter(function(product){
regExp.test(product.get('name'));
});
});
// all items are returned always..
return filteredResults;
}.property('products.@each', 'productSearchTerm')
編集
ここで promise を使用しようとしました (ソース: Filter child-records (hasMany association) with Ember.js ) が、この productSearchResults プロパティにはアクセスされないようです。ここからログ出力が得られません。テンプレートでは、filteredProducts をループしていますが、そこには何もありません。関連性がある場合、私は Ember 1.5.0 と Ember Data 1.0.0-beta.7+canary.b45e23ba を使用しています。
productSearchResults: function() {
var _that = this;
var productSearchTerm = this.get('productSearchTerm');
var regExp = new RegExp(productSearchTerm,'i');
this.store.find('shop').then(function(shops) {
var promises = shops.map(function (shop) {
return Ember.RSVP.hash({
shop: shop,
products: shop.get('products').then(function (products) {
return products.filter(function (product) {
return regExp.test(product.name);
});
})
});
});
Ember.RSVP.all(promises).then(function (filteredProducts) {
_that.set('filteredProducts', filteredProducts);
});
});
}.property('products.@each', 'productSearchTerm')