问题与Ember.js: retrieve random element from a collection
有关我有两条路线:randomThing
路线和things
路线。
前者从API(GET /things/random
)显示一个随机的东西(有一个“获取另一个随机的东西”的按钮),后者:显示所有内容:(GET /things
)
问题在于,当我点击Get another random thing
并且显示新事物并且我转到recipes
路线时,每次都会将这个新显示的随机内容添加到集合中...
获取随机内容的操作会按相关问题中的建议执行find("random")
,并将this.content
设置为此值。
这里有什么问题?
修改
我正在使用ember-data
,我的路线是这样的:
App.ThingsRoute = Ember.Route.extend({
model: function() {
return App.Thing.find();
}
});
答案 0 :(得分:1)
问题在于,当我点击获取另一个随机的东西并且显示新的东西时,我会去配方路线这个新显示的随机物品被添加到集合......
这是预期的行为。 App.Thing.find()
不会简单地查询api并返回结果。相反,find()返回一个包含ember知道的所有东西的数组。它包括过去调用find()返回的对象,通过App.Thing.createRecord()创建的客户端对象,当然还有通过App.Thing.find('random')
查询的单个对象。返回此数组后,find()并启动另一个API调用,如果返回其他记录,则将它们推送到数组上。
这里有什么问题?
这听起来不像是有什么不对的。如果你想防止随机事物出现在ThingsRoute中,你需要将该路线的模型改为过滤器,而不是仅仅返回每一件事。例如:
App.ThingsRoute = Ember.Route.extend({
model: function() {
//Kick off query to fetch records from the server (async)
App.Thing.find();
//Return only non-random posts by applying a client-side filter to the posts array
return App.Thing.filter(function(hash) {
if (!hash.get('name').match(/random/)) { return true; }
});
}
});
有关工作示例,请参阅此jsbin
要详细了解过滤器,建议您阅读ember-data store-model-filter集成测试