在Ember本地存储适配器中加载数据时出错

时间:2013-07-19 22:14:51

标签: ember.js

我正在尝试加载一些数据,但是我收到了这个错误:

Uncaught Error: Attempted to handle event `loadedData` on <App.Person:ember295:1q697> while in state rootState.loaded.created.inFlight. Called with undefined 

加载如下:

App.then(function(){
  App.mystuff = ['Nina', 'Paul', 'Zoe'];

  App.mystuff.forEach(function(item){
    console.log("this is the item:");
    console.log(item)
    var p = App.Person.createRecord({name: item})
    p.save(); // just save on LS Adapter
  });
  console.log("Were they added?");
  console.log(App.Person.find());
});

您可以在this JSbin中看到该应用。你知道怎么解决吗?

基本上我想知道如何让App.Person.find()在控制台和代码中工作。到目前为止,我还没有获得任何结果。

Possibly related

3 个答案:

答案 0 :(得分:1)

  

我正在尝试加载一些数据,但是我收到了这个错误...你知道如何修复它吗?

似乎localstorage适配器在inFlight中访问记录时遇到问题。这是令人惊讶的,但很容易解决。由于您在初始化应用程序时尝试将数据加载到本地存储中,建议从路由的beforeModel挂钩中加载它:

beforeModel: function() {
  return App.mystuff.map(function(i) {
    return App.Person.createRecord({name: i}).save();
  });
},

另外,建议为每条记录指定一个id,否则最终会创建重复的本地副本。这样的事情应该有效:

beforeModel: function() {
  return App.mystuff.map(function(i) {
    return App.Person.createRecord({id: i, name: i}).save();
  });
},

有关工作示例,请参阅此jsbin:http://jsbin.com/ofemib/2/edit

  

基本上我想知道如何让App.Person.find()在控制台和代码中工作。到目前为止,我还没有得到任何结果。

一般情况下,你可以让一个模型的find方法从控制台通过一个函数传递给它,如下所示:

 App.Person.find().then(function(results) { console.log(results.get('length')) });

这不是一个本地存储的东西,只是处理异步的一些好习惯。

答案 1 :(得分:0)

我不确定这是否有帮助,但我把几个例子放在一起。我更新了一些随机库,但总体思路仍然存在。

JSBin

答案 2 :(得分:0)

失败的原因是,在保存数据时,ember正试图访问App.Person.find()中的数据。这是一个有趣的场景,因为应用程序通常不会自己创建记录,而是在启动时创建它们(想想灯具)或者它们是由用户在页面内创建的,而不是在过渡期间创建的。

我建议使用ember的fixtureadapter进行初始测试,一旦你的应用程序与灯具配合良好,然后转移到你选择的存储器。这样,您可以专注于创建应用程序的重要方面,并在以后担心持久性。