我正在尝试编写一个搜索数据存储的小动作,该数据存储已经将数据加载到数据存储中。我希望能够通过字符串搜索,即名字。
这是我到目前为止的代码示例。 this.get()从搜索表单中获取值,我知道它从输入字段中获取了正确的值。
actions: {
search: function() {
return this.store.all('person', { firstName: this.get('firstName') });
},
}
以下是模型:
App.Person = DS.Model.extend({
firstName: attr('string'),
lastName: attr('string'),
email: attr('string'),
});
当我执行此操作时,它只返回DS中的所有记录。
另外,单独的问题,但是Ember做了LIKE声明吗?让我们说第一个名字是斯坦利,我进入斯坦。它会检索斯坦利还是只查找完全匹配?
我无法通过谷歌或文档找到任何内容,我可能会以错误的方式表达问题。
提前致谢。
答案 0 :(得分:1)
使用filter
var liveCollection = this.store.filter('foo', function(record){
// if the bar property is baz include it in the collection
return record.get('bar')=== 'baz';
});
所以对于你的情况来说,它是
search: function() {
var fn = this.get('firstName');
return this.store.filter('person', function(record){
return record.get('firstName') === fn;
});
},
http://emberjs.com/api/data/classes/DS.Store.html#method_filter
答案 1 :(得分:0)
尝试使用查找而不是所有功能
return this.store.find('person', { firstName: this.get('firstName') });
答案 2 :(得分:0)
要在已加载的商店中搜索,您可以使用peekAll获取所有记录,然后使用findBy
方法查找。这不会触发请求。
return this.store.peekAll('person').findBy('firstName', this.get('firstName'));