这段用于在has中搜索的代码许多儿童的工作都很有魅力。但我想在当前模型中搜索(例如,按商店名称筛选:"storeOne"),这就是原因,因为我想在现有模型中搜索,而不是查询到this.store,也不是查询到api。。。
var _self = this;
this.store.findAll('store').then(function(stores){
// search
var promises = stores.map(function(store){
return Ember.RSVP.hash({
store: store,
customers: store.get('customers').then(function(customers){
return customers.filter(function(customer){
var regExp = new RegExp(search, 'i');
var retVal = false;
if (customer.get('name') !== undefined ) retVal = retVal || customer.get('name').match(regExp);
if (customer.get('surname') !== undefined ) retVal = retVal || customer.get('surname').match(regExp);
if (customer.get('age') !== undefined ) retVal = retVal || customer.get('age').match(regExp);
return retVal;
});
})
});
});
Ember.RSVP.all(promises).then(function(filteredData){
_self.set('content', filteredData);
});
});
- 问题:在不使用findAll或查询API的情况下,如何在当前模型中通过搜索客户进行筛选
更新:
解决我的问题,过滤当前模型项而不请求新数据从this.store或服务器api。
filtered: Ember.computed.filter('model.@each.store', function(store){ var search = this.get('searchString'); if (search !== undefined) { guild.get('customers').then(function(customers) { var regExp = new RegExp(search, 'i'); customers.map(function(customer){ var retVal = false; var name = customer.get('name'); var surname = customer.get('surname'); var age = customer.get('age'); if (name !== undefined ) { retVal = retVal || name.match(regExp) !== null; } if (nick !== undefined ) { retVal = retVal || surname.match(regExp) !== null; } if (age !== undefined ) { retVal = retVal || age.match(regExp) !== null; } customer.set('show', retVal); }); }); } else { guild.get('customers').then(function(customers) { customers.map(function(customer){ customer.set('show', true); }); }); } return store; }).property('model.@each.store', 'searchString')
如果我理解你的问题,你不想向后端请求检索模型的子级吗?
如果它是正确的,下面的应该对你来说没问题。这是Ember文档的摘录。
使用store.peekRecord()可以按记录的类型和ID检索记录,而无需发出网络请求。只有当记录已存在于存储中时,才会返回该记录。