そのため、regExp でフィルタリングしたアイテムに itemController を使用し、RSVP.hash として返す方法を見つけようとしています。
多くの店舗を持つ製品モデルがあります。製品名と店舗の住所と名前に基づいてデータをフィルタリングしています。モデルは関連しているため、RSVP として返す必要があります。これにより、フィルタされたアイテムに itemController を使用しようとすると、設定した itemControllers プロパティが使用されず、何も返されないという問題が発生します。
私のコードは以下のとおりです。itemController を機能させるにはどうすればよいですか、またはこのロジックをより良い方法で書き直す必要がありますか?
製品コントローラー
var ProductController = Ember.ArrayController.extend({
needs: ['application' , 'product'],
itemController: "ProductItem",
filteredProducts: [],
...
actions: {
changeCategory: function(category) {
var productController = this.get('controllers.product');
productController.set('productCategory', category);
var shopSearchTerm = this.get('shopSearchTerm');
var productSearchTerm = this.get('productSearchTerm');
var regExp = new RegExp(productSearchTerm,'i');
var shopRegExp = new RegExp(shopSearchTerm,'i');
var promises = this.get('model').map(function(product){
if(regExp.test(product.get('name')) && product.get('category') === productController.get('productCategory')) {
return Ember.RSVP.hash({
product: product,
shops: product.get('shops').then(function(shops){
return shops.filter(function(shop){
if(shopRegExp.test(shop.get('name')) || shopRegExp.test(shop.get('address'))) {
return true;
} else {
return false;
};
});
})
})
} else {
return Ember.RSVP.hash({
product: [],
shops: []
})
}
});
Ember.RSVP.all(promises).then(function (filteredProducts) {
productController.set('filteredProducts', filteredProducts);
});
}
}
...
});
製品ビュー.hbs
<h2 class="product-price">{{ product.finalprice }} €</h2> {{! as expected, with filtered data this is undefined }}
ProductItemController
var ProductItemController = Ember.ObjectController.extend({
needs: ['application'],
finalprice: function () {
var rebateAmount = parseFloat(this.get('controllers.application').get('rebateAmount')).toFixed(2);
return this.get('price') - rebateAmount;
}.property('price', 'controllers.application.rebateAmount')
});
export default ProductItemController;
製品.hbs
{{! looping through the filtered products, explicit itemController }}
{{#each filteredProducts itemController='product-item'}}
{{#if product}}
{{#if shops }}
{{ log product.finalprice }} {{! undefined, this is "Object" not "Class" }}
{{view 'product-box'}}
{{/if}}
{{/if}}
{{else}}
...
{{/each}}
...
{{! just looping through the model }}
{{#each}}
{{ log this.finalprice }} {{! correct value, this is "Class" not "Object" }}
{{view 'product-box'}}
{{/each}}