Extjs在商店中添加多个记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Extjs在商店中添加多个记录相关的知识,希望对你有一定的参考价值。

在我的ExtJs应用程序中,我必须在进行一些编辑后保存商店中的多条记录(尽可能多的记录,因为它是beaconsCounter的数量),然后重新加载商店并关闭对话框,但我不知道为什么,没有发生。我是Extjs的新手,所以我不知道我的代码中有什么不对。

onSaveClick: function (button) {
              var dialog, store, beaconToSave , window;
              var numberOfBeaconPositionated, beaconsCounter, name, uuid, major, minor, originalNameValue;
              var arrayOfLong, arrayOfLat, nameString;

              window = button.up('window')
              dialog = window.down('form');
              dialog.updateRecord();
              beaconToSave = dialog.getRecord();
              store = beaconToSave.store;

              numberOfBeaconPositionated = this.lookupReference('beaconNumbers').getValue();
              name = beaconToSave.get('name');
              uuid = beaconToSave.get('uuid');
              major = beaconToSave.get('major');
              minor = beaconToSave.get('minor');
              latitude = this.lookupReference('beaconLatitude').getValue();
              longitude = this.lookupReference('beaconLongitude').getValue();

              if((name === "")||(uuid === "")){
                   Ext.Msg.alert(Strings.errorTitle, Strings.errorFieldMissing, Ext.emptyFn);
              }else if ((major === 0)||(minor === 0)){
                   Ext.Msg.alert(Strings.errorTitle, Strings.errorMajMin, Ext.emptyFn);
              }else if((longitude === "0")||(latitude === "0")){
                   Ext.Msg.alert(Strings.errorTitle, Strings.errorNoBeacons, Ext.emptyFn);
              }else{
                  nameString = name.split("-");

                  if((name.indexOf('-%min%') >= 0) || (name.indexOf('-%maj%') >= 0) || (name.indexOf('-'+major+'-'+minor) >= 0) || (nameString[1]!=null)) {
                     originalNameValue=nameString[0];
                  }else{
                     originalNameValue = name;
                  }

                  uuid = beaconToSave.get('uuid');
                  major = beaconToSave.get('major');
                  minor = beaconToSave.get('minor');
                  latitude = this.lookupReference('beaconLatitude').getValue();
                  longitude = this.lookupReference('beaconLongitude').getValue();
                  arrayOfLong = longitude.split(",");
                  arrayOfLat = latitude.split(",");
                  store = beaconToSave.store;
                  beaconsCounter = numberOfBeaconPositionated;

                  while(beaconsCounter > 0 ){

                      newRecord = beaconToSave.copy();
                      name=originalNameValue.concat("-"+major+"-"+minor);
                      newRecord.set('name',name);
                      newRecord.set('latitude',arrayOfLat[beaconsCounter-1]);
                      newRecord.set('longitude',arrayOfLong[beaconsCounter-1]);
                      newRecord.set('minor',minor);


                       if ( !store && !Ext.isEmpty(savedStore)){
                                 store = savedStore;
                             }
                             if (store) {
                                 if (newRecord.phantom) {
                                     store.add(newRecord);
                                 }
                                 store.sync({
                                     failure: function (batch) {
                                         store.rejectChanges();
                                         savedStore = store;
                                         if ( batch.exceptions[0].getError().status){
                                             if ( batch.exceptions[0].getError().status == 409){
                                                 Traccar.app.showError(this.getTitle() + Strings.errorAddDuplicate);
                                             }else if(batch.exceptions[0].getError().status == 400){
                                                 Traccar.app.showError(this.getTitle() + Strings.errorAddDatabase);
                                             }else{
                                                 Traccar.app.showError(batch.exceptions[0].getError().response);
                                             }
                                         }

                                     },
                                     success: function(){
                                         store.reload();
                                         this.close();
                                     }, scope: window
                                 });
                             } else {
                                 newRecord.save();
                                 this.closeView();
                             }
                      minor++;
                      beaconsCounter--;
                  }

              }
     },
答案

你不应该使用newRecord = beaconToSave.copy(),因为这会创建具有相同id的新记录。请改用newRecord = {'name':name,'latitude':arrayOfLat[beaconsCounter-1],'longitude',arrayOfLong[beaconsCounter-1],'minor',minor};

以上是关于Extjs在商店中添加多个记录的主要内容,如果未能解决你的问题,请参考以下文章

具有空存储的 ExtJS 网格,在添加/插入时仅显示添加的最新记录 [关闭]

等待加载多个 ExtJS 存储

从 ExtJs 4.1 存储中删除记录时会触发哪些事件

显示/隐藏 extjs 商店的记录

Extjs使用商店代理api; CRUD

Extjs 组合框根据属性显示商店记录