2014-03-13 75 views
0

我有一个存储配置了代理POST数据到服务器。我动态地向这家商店添加记录。在商店上调用sync()方法后,数据被发送到服务器。但看着网络流量,我发现整个记录数据都被发送出去了。如何配置商店仅发送单个数据(如仅记录的ID)?Ext JS Store POST请求过滤参数

我试图seeting的WriteAllFields属性设置为false在连接到代理的JSON writter但这并没有帮助

我自己也尝试这种方法: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"); 
+0

你是如何修改记录的?你有没有可能在上面设置脏标志? – lascort

+0

我将记录从另一个商店添加到此商店,然后调用sync() – Jacob

回答

1

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

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

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

+0

我只希望将ID列表发送到服务器,它们都是... – Jacob

+0

但您知道这些ID是针对新模型实例动态生成的,对?您是否使用Ext.data.IdGenerator子类之一? – existdissolve

+0

他们不生成我知道他们,因为我已经从另一个现有的商店添加他们。 – Jacob