2

我在我的应用程序中不断收到此错误,但不知道是什么原因造成的。

每当我提交数据存储时都会发生这种情况:

尝试loadedData在 rootState.loaded.updated.inFlight 状态下处理事件。未定义调用

任何人?

这是导致它的代码:

var ts_setting;

ts_setting = Cluey.Setting.find(Cluey.SettingsKeyIDs.API_TIMESTAMP);

if (ts_setting.get('value') != null) {
  console.log("Found Timestamp");
} else {
  console.log("Creating Initial Timestamp...");
  ts_setting.set("id", Cluey.SettingsKeyIDs.API_TIMESTAMP);
  ts_setting.set("value", 0);
  Cluey.store.commit();
}

编辑

我已将其归结为导致错误的以下代码(用咖啡脚本编写)。问题是,我第一次运行代码时,当对象第一次不存在于数据存储中时,它运行良好。当我在已经包含具有指定 ID 的记录的数据存储上运行代码时,就会发生错误。这可能会帮助您破译正在发生的事情。

ts_setting = Cluey.Setting.find(Cluey.SettingsKeyIDs.API_TIMESTAMP)
ts_setting.get('value')
ts_setting.set("id", Cluey.SettingsKeyIDs.API_TIMESTAMP)
ts_setting.set("value", 0)
Cluey.store.commit()

编辑 2

我在创建记录时遇到了类似的问题:

ts_setting = Cluey.Setting.createRecord
    id: Cluey.SettingsKeyIDs.API_TIMESTAMP,
    value: 0

Cluey.store.commit()

上面的代码给了我这个错误:

Uncaught Error: Attempted to handle event `loadedData` on <Cluey.Setting:ember327:1> while in state rootState.loaded.created.inFlight. Called with undefined

编辑 3

所以事实证明,我是@timestamp = ts_setting.get('value')在提交我认为导致问题的存储之后才调用的,因为我试图从尚未保存的对象中获取一些数据。

4

1 回答 1

6

加载数据是异步的。Cluey.Setting.find向您返回一个承诺,一旦 XHR 请求成功,该承诺将被解决/更新。

所以你在调用时得到你的承诺Cluey.Setting.find,修改它(ts_setting.set("value", 0))然后在某个时间点,你从你的服务器得到结果(来自的响应find)。

此时,ember 数据引发错误,因为它无法更新正在修改的记录。

您要做的是等待您的记录在修改和保存之前完全加载。

ts_setting = Cluey.Setting.find(Cluey.SettingsKeyIDs.API_TIMESTAMP);
ts_setting.one('didLoad', function() {
  ts_setting.set("value", 0);
  Cluey.store.commit();
});
于 2013-05-03T17:33:15.763 回答