1

我正在尝试加载一些数据,但出现此错误:

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());
});

您可以在这个 JSbin中看到该应用程序。你知道如何解决吗?

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

可能相关

4

3 回答 3

1

我正在尝试加载一些数据,但出现此错误...您知道如何解决吗?

似乎本地存储适配器在飞行中访问记录时遇到问题。这令人惊讶,但很容易解决。由于您正在尝试在应用程序初始化时将数据加载到本地存储中,因此建议从路由的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() 在控制台和代码中工作。到目前为止,我在任何地方都没有得到结果。

通常,您可以让模型的findto 方法从控制台向其传递函数,如下所示:

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

这并不是真正的本地存储,只是处理异步事物的好习惯。

于 2013-07-24T02:13:19.077 回答
0

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

JSBin

于 2013-07-23T04:59:46.953 回答
0

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

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

于 2013-07-23T06:31:48.267 回答