2013-06-06 1 views
0

Следующие должны быть тривиальными, но я не могу заставить его работать: У меня есть следующие Ext.form.Panel:Обновление значения на Ext.form.Panel

Ext.define('EvaluateIt.view.SiteEvaluationForm', { 
    extend: 'Ext.form.Panel', 
    alias : 'widget.siteEvaluationForm', 
    id: 'evaluationId', 
    requires: [ 
     'Ext.form.Panel', 
     'Ext.form.FieldSet', 
     'Ext.field.Url', 
     'Ext.field.Select', 
     'Ext.field.Hidden' 
], 
    config: { 

     // We give it a left and top property to make it floating by default 
     left: 0, 
     top: 0, 

     // Make it modal so you can click the mask to hide the overlay 
     modal: true, 
     hideOnMaskTap: true, 

     // Set the width and height of the panel 
     //width: 400, 
     //height: 330, 
     width: Ext.os.deviceType == 'Phone' ? screen.width : 300, 
     height: Ext.os.deviceType == 'Phone' ? screen.height : 500, 
     scrollable: true, 
     layout: { 
      type: 'vbox' 
     }, 
     defaults: { 
      margin: '0 0 5 0', 
      labelWidth: '40%', 
      labelWrap: true 
     }, 
     items: [ 
      { 
       xtype: 'textfield', 
       name: 'address', 
       label: 'Address', 
       itemId: 'address' 
      }, 
      { 
       xtype: 'hiddenfield', 
       itemId: 'imageUriId', 
       name: 'imageUri' 
      }, 
      { 
       xtype: 'button', 
       itemId: 'siteImage', 
       text: 'Take Photo' 
      }, 
      { 
       xtype: 'button', 
       itemId: 'save', 
       text: 'Save' 
      } 
     ] 
    } 

}); 

который получает открыт из onItemDisclosure в виде списка и, таким образом, привязана к записи.

При нажатии кнопки «siteImage» пользователь выбирает изображение из фотогалереи, а uri записывается во временный магазин для обработки. Эта часть работает отлично.

Что мне нужно сделать: Когда «save» в приведенной выше форме используется, мне нужно взять uri из временного хранилища и записать его в тот же магазин, в котором все значения из приведенной выше формы будут сохранены.

Чтобы сделать это, я следующий метод:

onSaveSiteEvaluation: function(button) { 
    console.log('Button Click for Save'); 
    //var form = button.up('panel'); 
    var form = Ext.getCmp('evaluationId'); 
    //get the record 
    var record = form.getRecord(); 
    //get the form values 
    //var values = form.getValues(); 
    // return a clone for updating of values 
    var values = Ext.clone(form.getValues()); 

    //if a new siteEvaluation 
    if(!record){ 
     var newRecord = new EvaluateIt.model.SiteEvaluation(values); 
     Ext.getStore('SiteEvaluations').add(newRecord); 
    } 
    //existing siteEvaluation 
    else { 

     // get image uri from temp store 
     var images = Ext.create('EvaluateIt.store.ImageQueue'); 

     images.queryBy(function(record,id){ 
      images = Ext.getStore(images); 

      if (images.getCount() > 0) { 
       var uri = record.get('src'); 
       // image = Ext.getCmp('imageUri'); 

       //image = form.setValue(uri); 

       //form.getCmp('imageId').setValue(uri); 

       console.log('URI: ' + uri); 

       // THIS DOES NOT WORK!! 
       form.setValues({ 
        imageUri: uri 
       }) 

     //record.set('imageUri',uri) 
       console.log('imageUri: '+ record.get('imageUri')); 

      } 
     }); 

     // do stuff 
     record.set(values); 
    } 
    form.hide(); 
    //save the data to the Web local Storage 
    Ext.getStore('SiteEvaluations').sync(); 

}, 

Все в этом методе работает КРОМЕ, где я пишу значение Ури в форме

form.setValues({ 
    imageUri: uri 
}) 

Я попытался сделать 'uriImage' как xType скрытого поля и текстового поля, я пробовал клонировать значения из формы и т. д., и все это совершенно не повезло в обновлении фактического атрибута imageUri в магазине (ПРИМЕЧАНИЕ: все остальные значения форм обновляются просто отлично) , Что мне не хватает? Благодаря!

UPDATE

Это работает: хорошо

images.queryBy(function(iRecord,id){ 
    images = Ext.getStore(images); 

    if (images.getCount() > 0) { 
     var uri = iRecord.get('src'); 

     // update store with URI 

     form.setValues({ 
      imageUri: uri 
     }) 

     values = form.getValues(); 

     record = form.getRecord(); 

      } 
    }); 

    // do stuff 
    record.set(values); 

все средства, что хорошо кончается!

ответ

1

Поскольку Ext.form.Panel не имеет метода setValue. Прежде всего, необходимо получить основную форму из него:

form.getForm().setValue(); 

UPDATE: Мой плохо, я смотрел на документы ExtJS и не Сенча Touch. ваша форма имеет метод setValue.

После того как вы позвоните setValues(), вы можете вернуться getRecord()? Также похоже, что ваша внутренняя переменная record определена дважды. Это не должно быть проблемой, но ...

+1

На самом деле панель сенсорной формы Сенча [имеет этот метод] (http://docs.sencha.com/touch/2.2.1/#!/api/Ext.form. Panel-method-setValues) –

+0

Шай, первый пример загрузки данных в документации docs.sencha.com/touch/2.2.1/#!/api/Ext.form.Panel использует метод setValue, поэтому я не конечно, что вы имеете в виду? –

+0

Ops. Обновлен мой ответ – sha

Смежные вопросы