Javascript 如何在extjs4.1中删除数据之前更改删除数据?

Javascript 如何在extjs4.1中删除数据之前更改删除数据?,javascript,extjs,extjs4,extjs4.1,Javascript,Extjs,Extjs4,Extjs4.1,这是对我之前的问题()的改写,出于某种原因,这个问题没有得到任何关注 如何更改在“beforedrop”函数上触发的函数内丢弃的数据?这是ExtJS中的错误吗?我已经用尽了所有的解决办法 例如: listeners: { beforedrop: function(node, data) { console.log('before:'+data.records[0].phantom); data.records[0].phantom = true; cons

这是对我之前的问题()的改写,出于某种原因,这个问题没有得到任何关注

如何更改在“beforedrop”函数上触发的函数内丢弃的数据?这是ExtJS中的错误吗?我已经用尽了所有的解决办法

例如:

listeners: {
  beforedrop: function(node, data) {
      console.log('before:'+data.records[0].phantom);
      data.records[0].phantom = true;
      console.log('set:'+data.records[0].phantom);
  },
  drop: function(node, data) {
      console.log('confirm:'+data.records[0].phantom);
  }
印刷品:

before:false
set:true
confirm:false 
而不是

before:false
set:true
confirm:true
查看此代码,该代码在触发
beforedop
事件之后,但在
drop
事件之前调用

if (data.copy) {
    records = data.records;
    data.records = [];
    for (i = 0, len = records.length; i < len; i++) {
        data.records.push(records[i].copy());
    }
}
if(data.copy){
记录=数据记录;
data.records=[];
对于(i=0,len=records.length;i
Model
上执行
copy
不会复制记录上的
phantom
属性。如果记录有一个id并且被复制,那么在副本中将
phantom
设置为false


data.copy
是否设置为true?如果是这样的话,这几乎可以肯定是正在发生的事情。解决此问题的一种方法是重写模型上的复制方法,以同时复制幻影状态。另一种方法是重写handleNodeDrop,在复制记录后在幻影状态上进行复制。

可以在jsfiddle.net或-一个人们可以编辑代码并使用它的地方使用设置一个小演示程序。有时候,Extjs问题很难引起注意,也就是说,至少在我的观察中,因为选择使用它的主要是那些关心编程的服务器端的公司。通常不会听JavaScript/Extjs问题的人是的,我想你是对的。JSFIDLE可能无法很好地复制我的问题,因为我从服务器获取数据,伪造数据可能会导致不同的结果。尽管如此,核心问题是:数据被正确地拖放,但目标位置的存储没有重新编码新数据,因为
phantom
标志被设置为
false
。我怎样才能改变呢?我不确定你是否应该使用幻影或者你应该怎么做。也许您可以尝试使用
.setDirty()
代替,请参阅文档:我将模型的
copy
方法重写为以下内容:
copy:function(){var me=this;var c=new me.self(me.raw,null,null,Ext.apply({},me[me.persistenceProperty]);c.id=null;c.phantom=true;返回c;}
,store.getNewRecords()现在会拾取新记录,但这些记录最终不会添加到存储中@Is7aq If
store.getNewRecords()
返回必须添加到该存储的记录。你说他们没有被加入商店是什么意思?尝试将覆盖更改为
copy:function(){var c=this.callParent(参数);c.phantom=true;返回c;}
您是对的,现在都设置好了。我在商店中使用getTotalCount()检查记录是否存在,这就是为什么我没有看到修复。谢谢你抽出时间!