使用 Ember 可枚举方法过滤模型数据
Filtering model data with Ember Enumerable methods
完整代码:
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 吗?我应该怎么做?
我找到了一个替代解决方案,即使用观察器并直接从商店获取 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 应该是。
store.find 方法总是 returns 一个 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);
});
}
完整代码:
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 吗?我应该怎么做?
我找到了一个替代解决方案,即使用观察器并直接从商店获取 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 应该是。
store.find 方法总是 returns 一个 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);
});
}