在另一条路线中访问商店

时间:2015-03-21 17:44:04

标签: ember.js ember-data store

我有这个型号:

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

和这条路线:

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

这很好用,调用后端服务器,并在商店中存储元素(我已经用Ember检查器检查过)。这是我回来的json:

{"游戏":[{" ID":"井字游戏""名称":"井字游戏" " URI":" http://localhost:10000/games/TicTacToe"}]}

现在我有这个游戏的模板' (剪断):

{{#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);

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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