Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Extjs-从存储中删除新添加的选定项_Javascript_Extjs_Grid - Fatal编程技术网

Javascript Extjs-从存储中删除新添加的选定项

Javascript Extjs-从存储中删除新添加的选定项,javascript,extjs,grid,Javascript,Extjs,Grid,我必须删除editorgrid中的选定项。首先加载存储,用户可以选择向该网格添加或删除空行,然后进行编辑。问题不在于删除存储中加载的初始记录。当我添加一个额外的行,编辑它,然后选择删除它时,问题就出现了(用户可能决定他根本不需要这一行) 似乎当我想使用store.getModifiedRecords保存更改时,它仍然会看到被删除的行,因此也会对其进行处理。以下是“移除”按钮: 442 443 text:'Remove', 444

我必须删除editorgrid中的选定项。首先加载存储,用户可以选择向该网格添加或删除空行,然后进行编辑。问题不在于删除存储中加载的初始记录。当我添加一个额外的行,编辑它,然后选择删除它时,问题就出现了(用户可能决定他根本不需要这一行)

似乎当我想使用store.getModifiedRecords保存更改时,它仍然会看到被删除的行,因此也会对其进行处理。以下是“移除”按钮:

442             
443                 text:'Remove',
444                 tooltip:'Remove attribute',
445                 iconCls:'silk-table_delete',
446                 handler: function() {
447                     var selectedItem = attributeEditor.getSelectionModel().getSelected();
448 
449                     // Check if we have selected item
450                     if (selectedItem) {
451                         // Get selected item value
452                         var attribute = selectedItem.get('Name');
453 
454                         // Remove selected
455                         attributeStore.remove(selectedItem);
456 
457                         // Add to our removed attributes hash
458                         if (id) {
459                             RemovedAttributes.push(attribute);
460                         }
461                     } else {
462                         wispUserFormWindow.getEl().mask();
463 
464                         // Display error
465                         Ext.Msg.show({
466                             title: "Nothing selected",
467                             msg: "No attribute selected",
468                             icon: Ext.MessageBox.ERROR,
469                             buttons: Ext.Msg.CANCEL,
470                             modal: false,
471                             fn: function() {
472                                 wispUserFormWindow.getEl().unmask();
473                             }
474                         });
475                     }
476                 }
477             }

在我脑海中,我不明白为什么你的代码会这样工作,因为它看起来是正确的。您是否使用Firebug设置断点并逐步完成该过程?

这就是store.getModifiedRecords()的工作方式。修改后的记录存储在一个名为modified in store object的数组中。从存储中删除项目时,默认情况下不会删除该项目

以下是从存储区中实际删除()的步骤

remove : function(record){
    var index = this.data.indexOf(record);
    this.data.removeAt(index);
    if(this.pruneModifiedRecords){
        this.modified.remove(record);
    }
    if(this.snapshot){
        this.snapshot.remove(record);
    }
    this.fireEvent("remove", this, record, index);
}
这意味着仅当您将pruneModifiedRecords选项值指定为true时,该项才会从修改的列表中删除。如Store API中所述,此值默认为false

如果要从修改列表中删除新添加的项,则必须在创建存储时将pruneModifiedRecords的值设置为true 例:

我认为下面的链接可以帮助您轻松处理商店


只是一个更新。。仍然不确定为什么会发生这种情况,但我所做的是在执行请求之前,检查删除列表中是否有匹配的项目,并将其从请求列表中删除。
var stote = new Ext.data.SimpleStore({
    fields: [],
    data: [],
    pruneModifiedRecords: true
})
store.load(); 
//remove function will delete specific record.
store.remove(store.findRecord("item_id","1"));
store.sync();