Ember:如果找不到,则创建一个新记录

时间:2016-06-16 15:14:32

标签: ember.js routing ember-data

我有一条从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)以正确的格式返回数据,作为对象。

1 个答案:

答案 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;
}