1

与以下相关的问题:Ember.js:从集合中检索随机元素

我有两条路线:randomThing路线和things路线。

前者显示来自 API ( GET /things/random) 的随机事物(有一个“获取另一个随机事物”的按钮),后者:显示所有事物:( GET /things)。

问题是每次单击Get another random thing并显示新事物并进行recipes路由时,都会将这个新显示的随机事物添加到集合中...

获取随机事物的操作find("random")按照相关问题中的建议执行 a 并设置this.content为此值。

这里有什么问题?

编辑:

我正在使用ember-data,我的路线是这样的:

App.ThingsRoute = Ember.Route.extend({
  model: function() {
    return App.Thing.find();
  }
});
4

1 回答 1

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集成测试

于 2013-01-31T13:18:24.953 回答