Nano Hash - криптовалюты, майнинг, программирование

javascript EXTJS закрыть и сбросить

Предыдущий программист использовал EXTJS, с которым я мало знаком.

Приложение, которое я пытаюсь исправить, имеет модальное окно под названием ДОБАВИТЬ УЧЕТНУЮ ЗАПИСЬ, с помощью которого пользователь может либо вручную ввести различные поля ввода, либо перетащить уже открытую учетную запись в модальное окно.

Пользователь может нажать кнопку сброса и очистить поля. Однако, если они не очищают поля и просто закрывают окно, при повторном открытии окна предыдущие данные остаются.

По сути, если пользователь решает закрыть окно, ему также необходимо сбросить и очистить все поля.

Как уже говорилось, я не слишком хорошо знаком с EXTJS. С учетом сказанного я включу приведенный ниже код, которого может быть много. Я постараюсь не включать ненужный код.

Есть 2 файла: accountGrid.php и accountGrid.js

Я выделил место, где, по моему мнению, проблема начинается в accountGrid.js. Вот что я нашел:

 function addAccount(){
   var AddAccountForm;
   var fields = [
    {name: 'must_have', mapping: 'must_have'},
    {name: "*** there are like 50 of these, so I'll skip the rest ***"}
    ];
   AddAccount = new Ext.FormPanel({
    autoScroll: true,
    monitorValid: true,
    defaultType: 'textfield',
    items:
          [
           {
           xtype: 'fieldset',
           title: 'Required Information',
           collapsible: true,
           autoHeight: true,
           defaultType: 'textfield',
           items: [*** random fields here ***]
           },
           {
           xtype: 'fieldset',
           title: 'Optional Information',
           collapsible: true,
           collapsed: true,
           autoHeight: true,
           defaultType: 'textfield',
           items: [*** random fields here ***]
           }
          ],
    buttons: *** this is where the buttons being ***
          [
           {
           text: 'Submit',
           id: 'submitAdd',
           formBind: true,
           handler: function(){
            AddAccountForm.getForm().submit({
             url: 'data-entry.php', *** hope I don't need to show this file's code ***
             waitMsg: 'Updating Record...',
             success: function(form, action){
              obj = Ext.util.JSON.decode(action.response.responseText);
              AddAccountForm.getForm().reset(); *** notice this reset function ***
              delete BookingDataStore.lastParams;
              BookingDataStore.removeAll();
              var sa = Ext.getCmp('salesArea').getValue();
              *** there are few more of these var sa fiels ***
              BookingDataStore.on('beforewrite', function(store, options){
               Ext.apply(options.params, {
                task: 'LISTING',
                salesarea:  sa,
                *** there are a few more of these variables ***
                *** honestly, I'm not sure what these are ***
                });
               });
               BookingDataStore.reload();
               Ext.Msg.alert('Success', 'The record has been saved.');
               AddAccountWindow.close();
              },
              failure: function(form, action){
                if(action.failureType == 'server'){
                  obj = Ext.util.JSON.decode(action.response.responseText);
                  Ext.Msg.alert('Error','Your account was not submitted.'+obj['error']);
                }
                else{
                  Ext.Msg.alert('Warning','There server is unreachable: ' +action.response.responseText);
                }
              }
             });
            }
           },
           {
           text: 'Reset',  *** here is the reset ***
           handler: function() {AddAccountForm.getForm().reset();}
           },
           { *** 2ND EDIT ***
           text: 'Close',
           AddAccountForm.getForm().submit({
               handler: function() {
                 Ext.Msg.alert('close');
               };
             });
           } *** 2ND EDIT CONTINUED BELOW ***
          ],
    keys: [{
        key: [10,13], fn: function(){
          var b = Ext.getCmp('submitAdd');
          b.focus();
          b.fireEvent("click", b);
        }
      }]                
   });
   AddAccountWindow = new Ext.Window({
     title: 'Add Account',
     closable: true,
     closeAction: 'close',
     y: 5,
     plain: true,
     layout: 'fit',
     stateful: false,
     items: AddAccountForm
   });
   AddAccountWindow.show(this);
 }

Это то, что я думаю, является основной частью accountGrid.js. Был еще код для функции перетаскивания, но мне не нужно было его отображать.

Не думал, что этот код такой длинный. Я даже не добрался до кода файла php. СМХ.

Вот код из accountGrid.php:

 var AddAccountForm = new Ext.FormPanel({
   id: 'AddAccountForm',
   autoScroll: true,
   monitorValid: true,
   submitEmptyText: false,
   defaultType: 'textfield',
   items: 
         [
           {
             xtype: 'fieldset',
             id: 'reqFieldSet',
             title: 'Required Information',
             *** there are more parameters, I'll skip to the buttons ***
           }
         ],
    buttons: 
         [
           {
             text: 'Submit',
             id: 'submitAdd',
             formBind: true,
             handler: function(){
               var pc = partnerCodeField.getValue();
               var pn = partnerNameField.getValue();
               AddAccountForm.getForm().submit({
                 url: 'data-entry.php',
                 waitMsg: 'Updating Record....',
                 params: {partner_code:pc, partner_name:pn},
                 success: function(form, action){
                   obj = Ext.util.JSON.decode(action.response.responseText);
                   AddAccountForm.getForm()reset();
                   delete BookingDataStore.lastParams;
                   BookingDataStore.removeAll();
                   BookingDataStore.on('beforeload', function(store, option){
                     Ext.apply(options.params, {
                       ns_task: "SEARCHING"
                     });
                   });
                   BookingDataStore.load();
                   TradeTotalsDataStore.reload();
                   Ext.Msg.alert('Success','The record has been saved.');
                   AddAccountWindow.hide();
                 },
                 failure: function(form, action){
                   if(action.failureType == 'server'){
                     obj = Ext.util.JSON.decode(action.response.responseText);
                     Ext.Msg.alert('Error','Your account was not submitted.'+obj['error']);                       
                   }
                   else{
                     Ext.Msg.alert('Warning','The server is unreachable:'+action.response.responseText);
                   }
                 }
               });
             }
           },
           {
           text: 'Reset',
           handler: function(){
               AddAccountForm.getForm().reset();
               partnerCodeField.enable();
               partnerNameField.enable();
             }
           }, *** 2ND EDIT ***
           {
           text: 'Close',
           handler: function(){
              AddAccountForm.getForm().reset();
              AddAccountWindow.close();
              partnerCodeField.enable();
              partnerNameField.enable();
            }
           } *** END 2ND EDIT ***   
         ],
    keys: 
         [
          {
            key: [10, 13], fn: function(){
              var b = Ext.getCmp('submitAdd');
              b.focus();
              b.fireEvent("click", b);
            }
          }
         ]
 });
 var AddAccountWindow = new Ext.Window({
   title: 'Add Account',
   closeable: true,
   closeAction: 'hide',
   y: 5,
   plain: true,
   layout: 'fit',
   stateful: false,
   items: AddAccountForm
 });

Я только что увидел это сразу после кода прямо выше:

 function addAccount(){
   AddAccountWindow.show(this);
   *** beneath this is code for the drag & drop features ***
   *** I don't think I need to show that ***
 }

Я не уверен, почему код из accountGrid.php и accountGrid.js выглядит одинаково. Прошу прощения за количество кода. Мне просто очень нужна помощь в расшифровке этого кода.

Просто повторюсь, когда они нажимают кнопку X в правом верхнем углу окна, модальная форма должна быть очищена, а затем закрыта.

11.02.2014

  • Я не уверен, правильно ли я понимаю, но вы спрашиваете, как очистить форму в Ext JS при нажатии кнопки закрытия? 11.02.2014
  • Это точно. Я написал много ненужного кода, не так ли? 11.02.2014
  • Извините, что да, но я постараюсь ответить и на него;) 11.02.2014

Ответы:


1

У вас есть окно с дочерним элементом по имени accountform. Что вы хотите сделать, так это добавить прослушиватель для кнопки закрытия окна и добавить код для очистки формы.

У вас уже есть это:

new Ext.Window({
     closable: true, //adds the close button
     closeAction: 'close', //'close' isn't supported (use 'hide')

Добавьте к нему слушателя:

{
    //....
    closable: true,
    listeners: {
        close:function(){
        //put clear form code here
        }
    }
}

Добавьте код для очистки формы:

AddAccountForm.getForm().reset(true)

В итоге это выглядит примерно так:

var AddAccountWindow = new Ext.Window({
    title: 'Add Account',
    closeable: true,
    closeAction: 'hide',
    y: 5,
    plain: true,
    layout: 'fit',
    stateful: false,
    items: AddAccountForm,
    listeners: {
        close:function(){
            AddAccountForm.getForm().reset(true);
        }
    }
});
11.02.2014
  • Хотя ваш код выглядел многообещающе, я все еще не мог повторно открыть окно с очищенным модальным окном. Я отредактировал свой код, добавив кнопку ЗАКРЫТЬ. Любые мысли о том, как я могу заставить это работать? 11.02.2014
  • @HoodCoderMan А, я думал, вы имели в виду кнопку закрытия в окне, но вы определили свою собственную кнопку закрытия. В вашем редактировании есть недопустимый javascript. Появляется ли оповещение close? Просто напишите AddAccountForm.getForm().reset(true); перед этой строкой :) 11.02.2014
  • Я сделал пару 2-ых правок. См. выше. Благодаря вашей помощи я смог заставить это работать. 1+ голос за вас. 11.02.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..