在另一条路线上访问商店

Accessing store in another route

我有这个型号:

App.Game = DS.Model.extend({
    name: attr(),
    uri: attr()
});

这条路线:

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

这工作正常,调用后端服务器,并将元素存储在商店中(我已经与 Ember 检查员核实过)。这是 json 我 return:

{"games":[{"id":"TicTacToe","name":"TicTacToe","uri":http://localhost:10000/games/TicTacToe "}]}

现在我有了 'games' 的模板(已截取):

{{#each game in model}}
{{#link-to 'games.matchlist' game.id}}{{game.uri}}{{/link-to}}

这显示了每个游戏的 URI。现在在 games.matchlist 路线中,我想做的是通过 game_id 收到的参数在商店中搜索并获取游戏 URI。原因是服务器不遵循 RESTAdapter 约定,我想自己对该 URI 进行自定义 AJAX 查询。 这不起作用:

App.GamesMatchlistRoute = Ember.Route.extend({model: function(params) {
   var store = this.store;
   var game = store.find('game', params.game_id)
   console.log(game);
   console.log("URI: " + game.uri);

此时,game 是一个对象,但它不是我的模型的实例。它没有 uri 属性。我究竟做错了什么?我觉得我遗漏了一些明显的东西。

我在我的手机上,但你需要创建一个 GameAdapter 并自定义我相信获取功能。查看 ember 站点上的适配器文档,您应该会有答案。

您的另一个选择是从您的服务器获取数据并使用 this.store.pushPayload(data)

文档在这里:http://emberjs.com/api/data/classes/DS.Store.html#method_pushPayload

适配器文档在这里:http://emberjs.com/guides/models/customizing-adapters/

如果您想在不访问服务器的情况下获取记录,并且您知道商店中已有它,请使用 this.store.getById('game', ID)。