Следующие должны быть тривиальными, но я не могу заставить его работать: У меня есть следующие 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);
все средства, что хорошо кончается!
На самом деле панель сенсорной формы Сенча [имеет этот метод] (http://docs.sencha.com/touch/2.2.1/#!/api/Ext.form. Panel-method-setValues) –
Шай, первый пример загрузки данных в документации docs.sencha.com/touch/2.2.1/#!/api/Ext.form.Panel использует метод setValue, поэтому я не конечно, что вы имеете в виду? –
Ops. Обновлен мой ответ – sha