我正在使用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' ] }
]
}
答案 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个参数,它将使用第二个作为过滤函数。
此外,过滤后的记录集非常酷,它们是活动记录集,因此系统会在系统找到满足过滤器的新记录时更新它们。