json - Ext.JS 防止代理发送额外的字段

标签 json extjs tree extjs4

这是我的模型:

Ext.define('A.model.Group', {
    extend: 'Ext.data.Model',
    fields:['id', 'name'],
    proxy: {
        type: 'rest',
        url: '/group',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeAllFields: false
        }
    }
});

该模型正在通过 TreeStore 在树中使用

问题是当 PUT , POSTDELETE方法已完成,而不是仅发送来自 JSON 有效负载中模型的字段,而是来自 Ext.data.NodeInterface 的字段。也发送。这是一个示例有效负载:
{"id":"","name":"TestGroup","parentId":"8","index":0,"depth":3,"checked":null}

我不想要额外的字段 parentId , index , depth , 和 checked将被寄出。做这个的最好方式是什么?我不想在服务器上忽略它们。

最佳答案

如果您不想仅将特定数据发送到服务器,则 writeAllFields 不是解决方案,因为它设置为 false 它只发送修改后的字段。
您的问题的解决方案是定义您自己的编写器并覆盖方法 getRecordData这是一个可能的例子:

var newWriter = Ext.create('Ext.data.writer.Json',{
  getRecordData: function(record){
       return {'id':record.data.id,'name':record.data.name};
  }
})

Ext.define('A.model.Group', {
    extend: 'Ext.data.Model',
    fields:['id', 'name'],
    proxy: {
        type: 'rest',
        url: '/group',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: newWriter
    }
});

关于json - Ext.JS 防止代理发送额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8003975/

相关文章:

javascript - ExtJS 5 : Accessing bound store in component

extjs面板在窗口调整大小时调整大小

java - Wicket - 树 + jquery-treeview

php - 使用简单的 JSON 数组制作 Doctrine 查询结果

java - 为什么我不断收到 "Not a JSON Array"?

javascript - Extjs 有一个协会

algorithm - 具有 N 个节点且具有相同后序和中序遍历的二叉树的数目

c# - 如何设计抽象语法树的各个部分?

javascript - steam价格概述语法错误

java - 将多个 JSON 对象从一个文件转换为一个 XML 文件,其中包含与 JSON 一样多的元素