完整代码:
http://jsbin.com/xabome/1/edit?html,js,output
我试图通过在商店返回的记录数组上调用.filter来过滤某些模型数据,但它没有效果。
我的控制器:
App.IndexController = Ember.Controller.extend({
fooDataOne: function() {
var fooData = this.get('fooData');
// If uncommented, I return both items
// return fooData;
return fooData.filter(function(item) {
console.log("Why am I not filtering?"); // Never called
if(item.get('id') == 1) { return true; }
});
}.property('fooData')
});
我不能打电话给.filter,因为我想来这里吗?我该怎么做呢?
答案 0 :(得分:0)
我通过使用观察者并直接从商店获取FilteredRecordArray找到了另一种解决方案:
App.IndexController = Ember.Controller.extend({
fooDataFilter: function() {
var fooData = this.get('fooData');
var fooDataOne = this.store.filter('test-data', function(item) {
if (item.get('id') == 1) { return true; }
});
this.set('fooDataOne', fooDataOne);
}.observes('fooData').on('init')
});
虽然上述方法有效,但它并不能解释为什么可枚举方法不能处理常规的DS.RecordArray,fooData应该是。
答案 1 :(得分:0)
store.find方法始终返回Promise。
所以你可以过滤一个then块中的数据:
setupController: function(controller, model) {
this.store.find('test-data').then(function(data) {
var fooData = data.filter(function(item) {
return item.get('id') == 1;
});
controller.set('fooDataOne', fooData);
});
}