2015-11-19 1 views
0

Я создал форму для редактирования, чтобы обновить массив комментариев новым комментарием. Все хорошо до сих пор.Форма EXTJS: как обновить запись, а не целую запись

Магазин от MongoDB.

Запись имеет дату ISO и при ее обновлении меняет ее на строку.

Отсюда:

"tmx" : ISODate("2015-07-19T00:26:53.000Z") 

к этому:

"tmx" : "Sun Jul 19 2015 00:55:23 GMT+0100 (Hora de Verão de GMT)" 

Пример записи:

"tmx" : ISODate("2015-07-19T00:26:53.000Z"), 
"comments" : [{ 
    "comment" : "tury", 
    "date" : "2015-11-19T01:15:13.552Z" 
}] 

Моя форма:

var form = new Ext.form.FormPanel({ 
    width: 500, 

    items: [{ 
     xtype: 'grid', 
     store: storearray, 
     margin: "0 0 10 0", 
     columns: [{ 
      id: 'comment', 
      header: "Text", 
      autoSizeColumn: true, 
      flex: 1, 
      sortable: true, 
      dataIndex: 'comment' 
     }, { 
      id: 'date', 
      header: "Date", 
      dateFormat: 'm-d-Y g:i A', 
      autoSizeColumn: true, 
      flex: 1, 
      sortable: true, 
      dataIndex: 'date' 
     }], 
     layout: { 
      type: 'fit', 
      align: 'stretch' 
     } 
    }, { 
     xtype: 'textarea', 
     id: 'new', 
     text: 'Add Comment', 
     style: 'width: 100%', 
     fieldLabel: 'Add Comment', 
     layout: {}, 
     name: 'comment' 
    }], 
    dockedItems: [{ 
     xtype: 'toolbar', 
     flex: 1, 
     dock: 'bottom', 
     ui: 'footer', 
     layout: { 
      pack: 'end', 
      type: 'hbox' 
     }, 
     items: [{ 
      xtype: 'button', 
      text: 'Cancel', 
      itemId: 'cancel', 
      iconCls: 'cancel' 
     }, { 
      xtype: 'button', 
      text: 'Save', 
      itemId: 'save', 
      iconCls: 'save', 
      handler: function (form, rowIndex, colIndex) { 
       var recform = this.up('form').getForm().getRecord(); 
       var names = recform.get('comments'); 
       var arraysize = names.length; 
       var val = Ext.getCmp('new').getValue(); 
       var actual = new Date().toISOString(); 
       if(val == "") { 
        alert('Comentario Vazio'); 
       } else { 
        names.push({'comment': val, 'date': actual}); 
        recform.save(); 
        var newRecord = store.sync(); 
        this.up('form').getForm().setRecord(newRecord); 
        this.up('form').refresh(); 
       } 
      } 
     }] 
    }] 
}); 

Что я хочу сделать, это просто обновить поле или оставить мою дату в формате ISODate. и новая дата комментария должна быть вставлена ​​asISODate.

Любые советы?

+0

Только несколько вопросов: действительно ли параметр 'autoSizeColumn' является параметром конфигурации? Это не '' autoSizeColumn' '(https://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext.view.Table-method-autoSizeColumn) метод, а не конфиг ? Не конфликтуют ли 'autoSizeColumn' (если это конфиг) и' flex' config? – Michel

ответ

0

Update конкретного поля в записи/модели:

набор (FIELDNAME, новое_значение, [опция]): String [] Устанавливает данное поле для данного значения, отмечает экземпляр, как грязный

Источник: Extjs model

В вашем примере, если я понимаю правильно сделать что-то вроде этого:

var recform = this.up('form').getForm().getRecord(); 
var actual = new Date().toISOString(); 
recform.set('comments', actual); 
Смежные вопросы