Ext JS Store POST请求过滤器参数

时间:2014-03-13 11:02:16

标签: javascript extjs store

我为服务器配置了一个代理POST数据的商店。我动态地向这个商店添加记录。在商店上调用sync()方法后,数据将被发送到服务器。但是看看网络流量,我看到整个记录数据都被发送了。如何将商店配置为仅发送单个数据(仅限于记录的ID)?

我尝试在连接到代理的JSON写入器上将WriteAllFields属性设置为false,但这没有帮助

我也尝试过这种方法:Ext.JS Prevent Proxy from sending extra fields但请求甚至没有执行

var documentStore = Ext.getStore('Document');
var trashStore = Ext.getStore('TrashDocuments');

documentStore.each (function(record) {

    console.debug(record);

    //record.phantom = true;
    //record.setDirty();

    trashStore.add(record);
    documentStore.remove(record);
});


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

trashStore.getProxy().setWritter(newWritter);

trashStore.sync({
            success: function()
            {
                console.debug("success!!");
            },
            failure: function()
            {
                console.debug("failed...");
            },
            callback: function()
            {
                console.debug("calling callback");
            },
            scope: this
        });

console.debug("END");

1 个答案:

答案 0 :(得分:1)

writeAllFields 配置不起作用,因为这仅对非幻像记录有意义;幻影(新)记录的任何字段都将被视为"已更改"因此包含在请求包中。

要排除包含在请求中的特定字段,请将 persist:false 添加到您不想包含的字段中。

话虽如此,我不太明白为什么你只想写一个新增记录的ID。除非你明确让Ext JS为你创建这些id,你实际上要发送给服务器的是什么?我不知道您的用例,但通常需要让您的持久层(例如数据库)为您的记录分配标识符。