如何在Ember视图中基于ID以外的属性查找单个记录

时间:2013-06-05 08:20:43

标签: ember.js ember-data

是否可以在Ember 1.0.0-rc.5的视图中根据其属性查找单个记录?我一直在寻找好几天,但我仍然找不到有用的东西。

例如,我希望能够这样做:

App.Tag.find({name: 'some tag'})应该返回一条记录,而是返回一个数组。

名称字段对于所有标记都是唯一的,因此它应该只返回一个对象。

如何做到这一点?

由于

2 个答案:

答案 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];