我目前在我的 Ember 应用程序中使用 FixtureAdapter,但是当我切换到 RESTAdapter 时,我的 URL 不再有效。
该应用程序是记分类型的东西,我希望用户能够记录所有分数而无需连接到网络。游戏结束后,他们可以选择将所有数据保存到服务器。
现在,当 Ember 想要路由到 match/:match_id 时,ID 不存在,因为我没有向服务器/存储提交任何内容,所以我的模型还没有 ID,我得到的 URL 如下: /match/null/游戏/null
这是预期的行为吗?如果是这样,是否有解决方法?我考虑过使用model.clientId,然后为每个路由覆盖模型钩子,以尝试在存在时使用id从商店中获取模型并回退到clientId。还有其他想法吗?
2013 年 3 月 10 日更新:
以下似乎符合我的需求,并且允许(暂时)忘记在本地存储和 REST 适配器之间来回移动:
App.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.extend({
namespace: 'api/v1',
bulkCommit: true,
generateIdForRecord: function(store, record) {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
})
});
UUID 函数取自:在 JavaScript 中创建 GUID/UUID?