2016-06-16 30 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; 
} 
相關問題