ExtJS 4.2.2:Ext.Direct回调/ JSON编写器

时间:2014-01-17 14:02:18

标签: json extjs

我已将网格连接到Ext.Direct,但我无法正常工作。

当我创建新记录时,新记录的ID(已在PHP中生成)随响应一起返回,但未保存在网格的存储中。因此,当我尝试更新此记录时,我收到一条错误消息,因为它尝试更新ID为0的记录。

我相信我需要在商店的代理上设置一个JSON Writer,但我还没有成功。

非常感谢任何使其正常工作的帮助。

这是我到目前为止所做的:

商店的型号:

Ext.define('Test.model.Post', {
    extend: 'Ext.data.Model',
    alias: 'model.postmodel',

    requires: [
        'Ext.data.Field',
        'Ext.data.proxy.Direct',
        'Ext.data.reader.Json',
        'Ext.data.writer.Json'
    ],

    idProperty: 'idPost',

    fields: [
        {
            name: 'id',
            type: 'int'
        },
        {
            name: 'idPost',
            type: 'int'
        },
        {
            name: 'achns',
            type: 'string'
        },
        {
            name: 'php_poststring',
            type: 'string'
        },
        {
            name: 'postNo1',
            type: 'int'
        },
        {
            name: 'postNo2',
            type: 'int'
        },
        {
            name: 'postNo3',
            type: 'int'
        },
        {
            name: 'postNo4',
            type: 'int'
        },
        {
            name: 'postNo5',
            type: 'int'
        },
        {
            name: 'postNo6',
            type: 'int'
        },
        {
            name: 'postNo7',
            type: 'int'
        },
        {
            name: 'php_name',
            type: 'string'
        },
        {
            name: 'processCode',
            type: 'string'
        },
        {
            name: 'processText',
            type: 'string'
        },
        {
            name: 'processFreetext',
            type: 'string'
        },
        {
            name: 'postUnit',
            type: 'string'
        },
        {
            name: 'postQuantity',
            type: 'string'
        }
    ],

    proxy: {
        type: 'direct',
        api: {
            create: 'Posts.createRecord',
            read: 'Posts.getResults',
            update: 'Posts.updateRecords',
            destroy: 'Posts.destroyRecord'
        },
        extraParams: {
            licence_id: sessionStorage.licenceid,
            username: sessionStorage.username,
            _c: sessionStorage.control,
            project_id: sessionStorage.projectid
        },
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeRecordId: false
        }
    }
});

JSON已发布(createRecord):

{
    "action": "Posts",
    "method": "createRecord",
    "data": [{
        "id": 0,
        "idPost": 0,
        "achns": "I",
        "php_poststring": "",
        "postNo1": 0,
        "postNo2": 0,
        "postNo3": 0,
        "postNo4": 0,
        "postNo5": 0,
        "postNo6": 0,
        "postNo7": 0,
        "php_name": "",
        "processCode": "",
        "processText": "",
        "processFreetext": "",
        "postUnit": "",
        "postQuantity": ""
    }],
    "type": "rpc",
    "tid": 3
}

JSON响应(createRecord):

{
    "type": "rpc",
    "tid": 3,
    "action": "Posts",
    "method": "createRecord",
    "result": [{
        "success": true,
        "message": "Successfully created post",
        "dataroot": [{
            "idPost": 119, // This ID should be updated in the store
            "fkpdHeader": 4,
            "fkpdObject": null,
            "fkpdElement": null,
            "fkndConstructionPart": null,
            "fkpdFloor": null,
            "fkpdCorrection": null,
            "ACHNS": "I",
            "status": 10,
            "descriptionCode": "",
            "ITTBdescription": "",
            "freeTextDescription": "",
            "quantity": 0,
            "unit": "",
            "postNo1": 0,
            "postNo2": 0,
            "postNo3": 0,
            "postNo4": 0,
            "postNo5": 0,
            "postNo6": 0,
            "postNo7": 0
        }]
    }]
}

然后,当我单击插入的记录进行编辑并提交时,会发生这种情况:

JSON已发布(updateRecords):

{
    "action": "Posts",
    "method": "updateRecords",
    "data": [{
        "id": 0,
        "idPost": 0, // Not set from previous return
        "achns": "I",
        "php_poststring": "",
        "postNo1": 0,
        "postNo2": 0,
        "postNo3": 0,
        "postNo4": 0,
        "postNo5": 0,
        "postNo6": 0,
        "postNo7": 0,
        "php_name": "",
        "processCode": "",
        "processText": "",
        "processFreetext": "asdads",
        "postUnit": "",
        "postQuantity": ""
    }],
    "type": "rpc",
    "tid": 15
}

错误回复(updateRecords):

  

PHP错误 - 从空值创建默认对象

因为idPost为0,所以无法从数据库中选择要编辑的记录。

编辑(2014-01-20): 添加了一些代码和错误信息。

1 个答案:

答案 0 :(得分:0)

我认为您需要查看模型的idProperty配置。默认情况下,Model期望标识符字段命名为“id”;将其更改为“idPost”,应在响应时正确更新商店记录。