我试图在我的ember应用程序中使用LSAdapter(https://github.com/rpflorence/ember-localstorage-adapter)。我只有一个页面叫做索引。即使在刷新页面时,我也使用localstorage来保存数据,因此在索引页面的LocalStorage中只会有一条记录。
当我尝试通过索引路径将模型绑定到控制器时,我收到此错误:
Assertion failed: You must include an "id" in a hash passed to "push"
但是,如果本地存储中有记录,一切正常。
这是我的IndexRoute:
PC.IndexRoute = Em.Route.extend({
model: function(){
var modelId = this.get('store').modelFor(this.routeName);
return this.get('store').find(this.routeName, modelId);
},
setupController: function(controller, model) {
controller.set('model', model);
}
});
如何摆脱此错误?
我是否需要在不使用LSAdapter的情况下手动签入LocalStorage?但这会破坏适配器的目的。
答案 0 :(得分:1)
我遇到了这个问题并最终修补了适配器(https://github.com/musicist288/ember-localstorage-adapter/commit/60313970d6591be51cd29c6137367721465294fc)。在我的应用程序中,我需要查找或创建行为,所以我最终得到以下内容:
App.Route = Em.Route.extend({
model: function (params) {
var store = this.get('store');
return new Ember.RSVP.Promise(function (resolve, reject) {
store.find("school", params.school_id).then(function (model) {
resolve(model);
}).catch(function () {
resolve(store.push("school", App.SchoolFixtures.findBy('id', params.school_id)));
});
});
}
});
不确定这是否是最佳解决方案,但现在可以使用。
答案 1 :(得分:0)
此修订已合并到LSAdapter的主分支中。
https://github.com/rpflorence/ember-localstorage-adapter/pull/66
它现在可以在https://github.com/rpflorence/ember-localstorage-adapter
的官方回购中开箱即用