2017-03-05 61 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/

相关问题