为什么我的组合商店不删除记录

时间:2014-05-26 03:27:56

标签: extjs

我有一个树形图。树中的每个节点都有一个复选框。当用户检查节点时,我将节点的文本作为选项添加到组合框中。这很像一个魅力。

当用户取消选中某个节点时,我想从组合框中删除相应的选项。有时会删除,有时则不会删除。我已经把头发拉了几天了。我究竟做错了什么?感谢。

这是我控制器中的init函数:

 init: function () {
     this.control({
         "#problemsTree": {
             load: this.selectFirstProblem,
             select: this.showProblemDetail,
             checkchange: this.handleCheckChange
         },
         "#run-problems-button": { click: this.runSelectedProblems },
         "#stop-problems-button": { click: this.stopSelectedProblems }
     });
 }

这是同一个控制器中的handleCheckChange函数:

toggleLogOption: function(record, isChecked) {
         var logStore = Ext.StoreManager.lookup("logs-store");
         if(isChecked && logStore.find("text", record.data.text) == -1) {
             logStore.add(record)
         } else if(!isChecked) {
             logStore.remove(record)
         }
         logStore.sync();
     },

 handleCheckChange: function(node, isChecked) {
     if(node.isLeaf()) { 
         var record = Ext.create("GiipIq.model.Log", {id: node.data.id, text: node.data.text});
         this.toggleLogOption(record, isChecked);
     } else {
         node.cascadeBy(function(nd) { 
                 nd.set("checked", isChecked); 
                 if(nd.isLeaf()) {
                     var record = Ext.create("GiipIq.model.Log", {id: nd.data.id, text: nd.data.text});
                     this.toggleLogOption(record, isChecked);
                 }
             }, 
             this    
         );
     }
 },

这是我的日志组合:

Ext.define("GiipIq.view.Log", {
         extend: "Ext.window.Window",
         alias: "widget.logwindow",
         titleAlign: "center",
         closable: false,
         maximizable: true,
         draggable: false,
         resizable: false,
         overflowX: "hidden",
         border: false,
         layout: 'fit',
         x: (Ext.getBody().getViewSize().width/2) + 2,
         y: 0,
         width: (Ext.getBody().getViewSize().width/2) - 5,
         height: Ext.getBody().getViewSize().height/2,

         initComponent: function () {
             this.items = [{
                 xtype: "panel",
                 itemId: "logPanel",
                 title: "Live Logs ",
                 tools:[{
                     xtype:"combo",
                     width: 250,
                     emptyText: "Filter logs",
                     id: "logFilter",
                     store: Ext.create("GiipIq.store.Logs"),
                     queryMode: "local",                                                                                                                                                                                                     
                     displayField: "text",
                     valueField: "id"
                 }]  
             }]; 
             this.callParent(arguments);
         }   
     });

这是我的日志商店:

Ext.define("GiipIq.store.Logs", {
         extend: "Ext.data.Store",
         storeId:"logs-store",
         model: "GiipIq.model.Log",

         sorters: [{ property: "text", direction: "ASC" }]                                                                                                                                                                                   
     });

这是我的日志模型:

Ext.define("GiipIq.model.Log", {                                                                                                                                                                                                        
         extend: "Ext.data.Model",
         idProperty: "text",
         fields: [
             { name: "id", type: "string"},
             { name: "text", type: "string" }
         ],  

         proxy: {
             type: "localstorage",
             id: "proxy-key",
             listeners: {
                 exception: function(proxy, response, operation, opts) {
                     if(typeof(operation.error) == "string") {
                         Ext.Msg.alert("Error", "Connection to server interrupted" + operation.error);
                     }   
                 }   
             }   
         }   
     });

1 个答案:

答案 0 :(得分:0)

即使您尝试删除,始终也会创建新记录。逻辑应该依赖于id,它们在树和组合中看起来是相同的,并且在删除时,你应该尝试通过id在组合中找到记录并删除它。仅在添加时创建新记录。