Ember-Data查询匹配数组中元素的模型

时间:2013-11-21 05:42:04

标签: ember.js ember-data

我正在使用Ember作为基本博客,我将博客集合加载到商店中。该模型的一个属性是标签。即。

post: {
    title: '...',
    post_content: '...',
    tags: [ 'javascript', 'ember' ]
}

我已经阅读了DS.store中关于'find'方法的所有文档,但是在查询模型中的元素与查询匹配时,我找不到任何内容。

任何人都知道你应该这样做吗?

编辑:这是我的相关Ember代码

TEMPLATE:

<ul class="nav nav-stacked">
    {{#each post in controller}}
        {{#link-to 'post' post tagName="li"}}<a href="#post">{{post.title}}</a>{{/link-to}}
    {{/each}}
</ul>

ROUTE:

App.JsRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('post');
    }
});

控制器:

App.JsController = Ember.ArrayController.extend({
    sortProperties: ['creationDate'],
    sortAscending: true
});

我尝试为路线做这个:

App.JsRoute = Ember.Route.extend({
    model: function() {
        return this.store.filter('post', function(record){ 
                    return record.getEach('tags').indexOf('javascript') > 0;
                });
    }
});

但是我收到了以下错误:

Error while loading route: TypeError {} ember.js:417
Uncaught TypeError: Object [object Object] has no method 'getEach'

我还在我的控制器中添加了一个计算属性,该属性是已过滤的集合数组,但是我更愿意通过路径中的model方法过滤帖子。任何帮助在路线上完成这一任务将不胜感激。

这是我的JSON:

{ posts:
   [ { __v: 2,
       _id: 1,
       author: '...',
       complete: true,
       creationDate: Sun Nov 17 2013 18:20:00 GMT-0800 (PST),
       post_content: '...',
       title: 'Dissecting JavaScript Objects',
       tags: [ 'javascript', ' objects' ] },
     { __v: 2,
       _id: 2,
       author: '...',
       complete: true,
       creationDate: Wed Nov 20 2013 20:03:27 GMT-0800 (PST),
       post_content: '...',
       title: 'How to create basic chainable functions',
       tags: [ 'underscore', 'objects' ] }
    ]
}

1 个答案:

答案 0 :(得分:1)

您可以执行过滤记录集。

Ember API

  @method filter
  @param {Class} type
  @param {Function} filter
  @return {DS.FilteredRecordArray}
  filter: function(type, query, filter) ....

使用示例

  this.store.filter('post',
     function(record){ 
       return record.get('tags').contains(model.tag)
     });

http://emberjs.jsbin.com/AkOxamu/1/edit

如果你使用2个参数,它将使用第二个作为过滤函数。

此外,过滤后的记录集非常酷,它们是活动记录集,因此系统会在系统找到满足过滤器的新记录时更新它们。