【问题标题】:Looking up a singleton with Ember Data使用 Ember 数据查找单例
【发布时间】:2014-10-15 16:06:13
【问题描述】:

是否有在 Ember Data 中查找单例的常规方法?我已经根据这些说明(在“Singular”下)为我的GameState 模型设置了我的适配器:https://stackoverflow.com/a/23974804/173630

现在,当我获取 GameState 时,我希望能够这样做:

store.find('gameState');

但这会在 Ember Data 中启动 findAll 请求类型,它需要一个数组,而不是一个对象。

我的另一个选择是做这样的事情:

store.find('gameState', 'mine');

mine 参数被忽略,但这将成功获取并加载我的 GameState。这里的缺点是 Ember Data 在我的商店中创建了一个额外的 GameState 实例,id 为 mine。有什么办法可以预防吗?

我正在使用 Ember Data 1.0.0-beta.11。

这是我的模型的样子:

var GameState = DS.Model.extend({
    currentPuzzle: DS.belongsTo('puzzle'),
    currentRound: DS.belongsTo('puzzleRound'),
    currentInventory: DS.attr('number'),
    moves: DS.hasMany('move', {async: true}),
    createdAt: DS.attr('date'),
    updatedAt: DS.attr('date')
});

【问题讨论】:

  • 你在哪里获取游戏状态?它与被调用的模型有任何关系吗?
  • GameState 网址位于 /api/game_state。我更新了我的问题以包含 GameState 模型。

标签: ember.js ember-data


【解决方案1】:

不,不幸的是,这样做会产生副作用。你可以在这里做一些不同的事情:

  1. 使用私有方法/成员破解它
  2. 切换到 findAll/findQuery 方法更改您的 api,然后只返回结果中的第一项(这将是唯一的结果)。
  3. 进行无聊的 ajax 调用,然后侧载记录。

findAll/findQuery - 痛苦,因为你必须改变你的 api

return this.store.find('foo').then(function(records){
  return records.get('firstObject');
});

jquery ajax 侧载

var store = this.store;
return $.ajax('foo').then(function(data){
  return store.push('foo', data);   // push returns the record
});

http://emberjs.com/api/data/classes/DS.Store.html#method_push

【讨论】:

  • 感谢您的回答。您是否有机会将我链接到 github 问题、博客文章或任何真正解释其背后原因的东西?如果没有对此的支持,ember 数据可以存在这么长时间,这对我来说似乎很疯狂
  • 推理什么,支持什么? :) 这里有两个问题,你在说哪一个?
  • 不支持请求单例资源。抱歉,不清楚。你在这里所做的似乎应该在核心 ember 数据中有一些东西
猜你喜欢
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多