2016-06-16 29 views
0

我有一个从REST API中获取数据的路由。用户第一次输入时,不会保存任何数据,所以我需要使用一些默认值创建记录。我想我需要在路径中执行此操作,以便用户可以看到我的默认值(在我的实际应用程序中它不仅为空),而不是在save操作期间创建。Ember:创建一个新记录如果没有找到

但是,如果数据库中有数据,我需要返回该记录。现在我被卡住了,一定不能做正确的事情(可能与承诺有关,但我不确定)。

我得到的错误是:

Error while processing route: project.dates Assertion Failed: 
Expected an object as `data` in a call to `push` for [email protected]: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

你不是应该使用查找和createRecord(“项目日期”,而不是单一化的型号名称“项目日期”)? –

+0

也许。我刚刚编辑。我从我的实际代码中重新输入了名称,因为这些名称对其他人没有意义。 – redOctober13

+0

您的API是否以适当的JSON API格式返回数据?看起来你的调用是返回数据并且实际上导致错误,因为应该在你的API响应根目录下的'data'对象不存在 – Nazim

回答

1

好吧,正如我怀疑的那样,我可以使用承诺的东西来解决这个问题,只需要继续搜索,直到我发现一些东西慢跑了正确的想法。

这里是如何将模型设置为找到的记录,或者创建一个新的纪录:

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; 
} 
相关问题