我正在尝试加载一些数据,但是我收到了这个错误:
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()
在控制台和代码中工作。到目前为止,我还没有获得任何结果。
答案 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)
我不确定这是否有帮助,但我把几个例子放在一起。我更新了一些随机库,但总体思路仍然存在。
答案 2 :(得分:0)
失败的原因是,在保存数据时,ember正试图访问App.Person.find()
中的数据。这是一个有趣的场景,因为应用程序通常不会自己创建记录,而是在启动时创建它们(想想灯具)或者它们是由用户在页面内创建的,而不是在过渡期间创建的。
我建议使用ember的fixtureadapter进行初始测试,一旦你的应用程序与灯具配合良好,然后转移到你选择的存储器。这样,您可以专注于创建应用程序的重要方面,并在以后担心持久性。