【问题标题】:Ext JS Store POST request filter paramsExt JS Store POST 请求过滤器参数
【发布时间】:2014-04-18 01:32:16
【问题描述】:

我有一个商店配置了一个代理到服务器的POST 数据。我动态地将记录添加到这个商店。在 store 上调用 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");

【问题讨论】:

  • 你是如何修改记录的?你有没有机会在上面设置脏标志?
  • 我将记录从另一个商店添加到此商店,然后调用 sync()

标签: javascript extjs store


【解决方案1】:

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

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

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

【讨论】:

  • 但是您知道这些 ID 是为新模型实例动态生成的,对吧?您是否在使用 Ext.data.IdGenerator 子类之一?
  • 它们不是生成的 我知道它们是因为我从另一个现有商店添加了它们。
  • 好的,这将是包含在您的原始帖子中的好信息 :) 与其尝试将作家一起破解,为什么不只是从商店中收集()ID并发布它们通过 Ext.Ajax?
  • 我实际上写了一个 Ajax 请求,花了 5 分钟。无论如何感谢您的建议...
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2012-03-26
  • 2011-09-08
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2011-10-12
相关资源
最近更新 更多