是否可以在Ember 1.0.0-rc.5的视图中根据其属性查找单个记录?我一直在寻找好几天,但我仍然找不到有用的东西。
例如,我希望能够这样做:
App.Tag.find({name: 'some tag'})
应该返回一条记录,而是返回一个数组。
名称字段对于所有标记都是唯一的,因此它应该只返回一个对象。
如何做到这一点?
由于
答案 0 :(得分:5)
问题解决了!对于可能遇到同样问题的人,我会在这里回答我的问题。我最终使用filter方法选择一个对象。详情请http://emberjs.com/api/classes/Ember.Enumerable.html#method_filter
代码:
...
tagList = App.Tag.find().filter (item, index, enumerable) ->
return item.get('slug') is "slug title"
tag = tagList.get('firstObject')
...
答案 1 :(得分:1)
将查询传递给模型的find方法时,您将调用findQuery方法,该方法用于填充数组。
这是findQuery的定义:
findQuery: function(store, type, query, recordArray) {
var root = this.rootForType(type),
adapter = this;
return this.ajax(this.buildURL(root), "GET", {
data: query
}).then(function(json){
adapter.didFindQuery(store, type, json, recordArray);
}).then(null, rejectionHandler);
},
成功后调用didFindQuery,填充返回的数组:
didFindQuery: function(store, type, payload, recordArray) {
var loader = DS.loaderFor(store);
loader.populateArray = function(data) {
recordArray.load(data);
};
get(this, 'serializer').extractMany(loader, payload, type);
},
所以,假设我的理解是正确的,假设您的案例中的每个“名称”都是唯一的,那么只需获取数组的第一个键:
var tags = App.Tag.find({name: 'some tag'});
var tag = tags[0];