LSAdapter store.find(type,id)试图推送一条新记录?

时间:2014-04-23 19:01:31

标签: ember.js

我试图在我的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?但这会破坏适配器的目的。

2 个答案:

答案 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

的官方回购中开箱即用