[英]How do I change the .save() JSON output for ExtJS 4.2
我有一個問題,使用ExtJS可更新網格將數據保存到我的數據庫。 我正在使用我在Progress ABL中編寫的REST API。 API正在運行,但輸入JSON和輸出JSON非常具體。
我可以將JSON數據讀入我的網格並顯示它,但是當我想保存新記錄時,網格會創建一個錯誤的JSON輸出。
我的輸出必須是這樣的:
{
"request":
{
"dsUsers":
{
"ttUsers":
[{"ID":20,"LOGIN":"test","PASS":"","ID_ADDR":0,"ID_CUST":0}]
}
}
}
但是我無法在編寫器中創建請求和dsUsers組。 我已經測試了很多,但我真的不知道我需要改變什么才能使它工作。
謝謝
Base Ext.data.writer.Json
允許您僅定義根數據屬性。 但是,如果您需要更多這樣的自定義結構,您可以非常輕松地創建自己的編寫器。
您的編寫者應該從Ext.data.writer.Json
擴展並覆蓋writeRecords
方法。 此方法將記錄數據添加到請求中。
在您的情況下,自定義編寫器應如下所示:
Ext.define('myWriter', {
extend: 'Ext.data.writer.Json',
writeRecords: function(request, data) {
var root = this.root;
if (this.expandData) {
data = this.getExpandedData(data);
}
if (this.allowSingle && data.length === 1) {
// convert to single object format
data = data[0];
}
request.jsonData = request.jsonData || {};
request.jsonData['request'] = {
'dsUsers': {}
};
request.jsonData['request']['dsUsers'][root] = data;
return request;
}
});
然后,您可以在模型或商店代理中使用自定義編寫器:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['id', 'name', 'email'],
proxy: {
type: 'rest',
writer: Ext.create('myWriter', {
root: 'ttUsers',
mainRoot: 'dsUsers'
}),
url : '/users'
}
});
當然,您可以通過在config中定義"request"
和"dsUsers"
屬性的名稱來創建更具可配置性和可重用性的自定義"dsUsers"
。
舉例說明: https : //fiddle.sencha.com/#fiddle/33l
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.