我有一条从REST API中提取数据的路由。用户第一次进入时,不会保存任何数据,因此我需要使用一些默认值创建记录。我想我需要在路径中执行此操作,以便用户可以看到我的默认值(在我的实际应用中不仅仅是null),而不是在save
操作期间创建。
但是,如果数据库中有数据,我需要返回该记录。现在我被困住了,一定不能做正确的事(可能与承诺有关,但我不确定)。
我得到的错误是:
Error while processing route: project.dates Assertion Failed:
Expected an object as `data` in a call to `push` for star@model:project-date: ,
but was undefined
这是我的路线代码:
var project = this.modelFor('project');
var projectDates = this.store.find('project-date', project.id);
if (projectDates) {
return projectDates;
} else {
return this.store.createRecord('project-date', {
project: project.id,
start: null,
checkpointA: null,
finish: null
};
}
令人费解的是,如果我只是否定我的if
语句来获取其他返回值(如此:if (!projectDates)
)那么我仍然会得到上面的错误,但它也会加载模型!我已经确认API(或我的模拟API)以正确的格式返回数据,作为对象。
答案 0 :(得分:1)
好吧,正如我所怀疑的那样,我可以使用promises来解决这个问题,只需要继续谷歌搜索,直到找到一些错误的想法。
以下是如何将模型设置为找到的记录,或者创建新记录:
model: function() {
var project = this.modelFor('project');
var projectDates = this.store.find('project-date', project.id).catch(function() {
return this.store.createRecord('project-date', {
project: project.id,
start: null,
checkpointA: null,
finish: null
};
});
return projectDates;
}