Sencha Touch:TextField上的setValue不起作用

时间:2014-03-07 17:03:48

标签: sencha-touch

在Sencha Touch 2中,我有一个控制器,可以调用自定义' prepopulate'按钮上的方法:

Ext.Ajax.request
    ({  
        method: 'GET',
        url:  myurl, //defined outside
        withCredentials: true,
        headers:{Authorization : auth},
        success: function(response){

            var data; 

            if(response.responseText.length > 0)
                  data = Ext.JSON.decode(response.responseText.trim());

            console.log(data);

            var fv = me.getFiscal();

            console.log(fv);

            fv.prepopulate(data);

            Ext.Viewport.animateActiveItem('fiscal', me.getSlideLeftTransition());
        },
        failure: function(response){
            Ext.Msg.alert('Server Error', 'Server down :( please try again later');
        }
    }


    );

查看代码:

prepopulate : function (data) {

    var me = this;


    var companyTextField = me.down('#fiscalForm').down('#companyTextField');
    var vatField = me.down('#fiscalForm').down('#vatField');

    var fiscalCodeTextField = me.down('#fiscalForm').down('#fiscalCodeTextField');
    var addressTextField = me.down('#fiscalForm').down('#addressTextField');

    var cityTextField = me.down('#fiscalForm').down('#cityTextField');
    var zipTextField = me.down('#fiscalForm').down('#zipTextField');

    var countryTextField = me.down('#fiscalForm').down('#countryTextField');
    console.log(vatField);
    console.log((data.vat));
    if(data){

        if(data.company_name)
            companyTextField.setValue(data.company_name);
        if(data.vat)
            vatField.setValue(data.vat);
        if(data.fiscal_code)
            fiscalCodeTextField.setValue(data.fiscal_code);
        if(data.address)
            addressTextField.setValue(data.address);
        if(data.city)
            cityTextField.setValue(data.city);
        if(data.zip)
            zipTextField.setValue(data.zip);
        if(data.country)
            countryTextField.setValue(data.country);

    }
    console.log(vatField);
}

AJAX调用工作正常,并且成功调用prepopulate方法传递从服务器检索的数据。 我尝试使用setValue()初始化TextFields,但表单看起来是全新的'当我用浏览器打开它时 console.log()告诉我,_value私有字段已经正确设置了......我现在正在黑暗中摸索......有什么见解?

提前谢谢你。

微米。

1 个答案:

答案 0 :(得分:0)

正如您所建议的那样,我正确地检索并使用console.log在控制台中显示数据,但是当调用setValue()时,浏览器找不到任何可见字段来修改该值。

到目前为止,解决方案是修改ajax请求,如下所示:

Ext.Ajax.request
({  
....
....
    success: function(response){
    ....
        Ext.Viewport.animateActiveItem('fiscal', me.getSlideLeftTransition());

                    //view must be in the viewport before modifying data:
        var task = Ext.create('Ext.util.DelayedTask', function () {
                var fv = me.getFiscal();
                fv.prepopulate(data);
        });
        task.delay(1000);
.....
....
...
..
.