更新Ext.form.Panel上的值

时间:2013-06-06 15:19:00

标签: extjs sencha-touch store updates formpanel

以下内容应该是微不足道的,但我无法让它起作用: 我有以下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并将其写入同一商店,以便将上述表格中的所有值保存到。< / p>

为此,我有以下方法:

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();

},

此方法中的所有内容都有效,除非我将uri的值写入表单

form.setValues({
    imageUri: uri 
})

我已经尝试将'uriImage'作为隐藏字段和文本字段的x类型,我尝试从表单中克隆值等等,所有这些都非常没有运气更新商店中的实际属性imageUri(注意:全部其他表格值更新得很好)。我错过了什么?谢谢!

更新

这有效:

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 个答案:

答案 0 :(得分:1)

因为Ext.form.Panel没有setValue方法。您首先需要从中获得基本形式:

form.getForm().setValue();

更新:我的不好,我正在查看ExtJs文档,而不是Sencha Touch。你的表单有setValue方法。

致电setValues()后,您可以再次getRecord()吗?看起来您的record内部变量定义了两次。那应该不是问题,但是......