2017-03-05 87 views
1

我必須通過DS.store處理來自外部api的HTTP方法(創建和更新)。服務器期望創建方法的其他字段,而不是更新方法。例如:對於如何使一個Ember數據模型適合多種形式?

POST

預期PARAMS在JSON:

{ 
    "name": "string", 
    "email": "string", 
    "login": "string", 
    "password": "string", 
} 

預計爲PUT方法PARAMS:

{ 
    "name": "string", 
    "subdomain": "string", 
    "person": "string", 
} 

顯然,我有其他形式的這些行動,但DS.store通吃請求DS.model中的字段。我的模型:

export default DS.Model.extend({ 
    login: DS.attr('string'), 
    password: DS.attr('string'), 
    name: DS.attr('string'), 
    subdomain: DS.attr('string'), 
    email: DS.attr('string'), 
    person: DS.attr('string'), 
}); 

因此,例如,POST請求如下所示:

{ 
    "name": "somethingName", 
    "email": "[email protected]", 
    "login": "login", 
    "password": "passw", 
    "subdomain": null, 
    "person": null 
} 

甚至,如果不期望鍵有null或未定義的值,我的服務器返回400(未識別參數 「subdomian」 ,「人」)。 不幸的是,我沒有訪問服務器,所以我必須傳遞給服務器只有預期的參數。我也試過在串行器是這樣的:

attrs: { 
     person: { serialize: false }, 
     subdomain: { serialize: false }, 
} 

但自然也被創造PUT請求錯誤...... 有PARAMS包含在我的HTML表單,或刪除參數,可以具有空的東西辦法只能通過/請求到服務器之前未定義的值?我知道,我可以使用除DS.store之外的其他東西,但我希望在客戶端和服務器之間只有一箇中間人使用清晰的代碼。

+1

必須嘗試使自己的適配器? –

+1

謝謝,我創建了新的適配器,並更改了ajax方法。 –

+0

我已經把它作爲答案,以便其他有類似的問題可以參考正確的地方。 –

回答

1

在Ember Data中,適配器確定數據如何持久保存到後端數據存儲區,例如REST API的URL格式和標頭。

如果你有一個具有特殊的規則,其後端進行通信的一個模型比其他的你可以通過運行命令

ember generate adapter adapter-name 

有關自定義適配器的詳細信息創建一個模型特定適配器閱讀下面的鏈接。 ,

https://guides.emberjs.com/v2.6.0/models/customizing-adapters/

相關問題