Sencha touch Sencha Touch:TextField上的设置值不起作用
在Sencha Touch 2中,我有一个控制器,在点击按钮时调用自定义的“预填充”方法:Sencha touch Sencha Touch:TextField上的设置值不起作用,sencha-touch,Sencha Touch,在Sencha Touch 2中,我有一个控制器,在点击按钮时调用自定义的“预填充”方法: Ext.Ajax.request ({ method: 'GET', url: myurl, //defined outside withCredentials: true, headers:{Authorization : auth}, success: function(response){
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()初始化文本字段,但当我使用浏览器打开表单时,它看起来是“全新的”
console.log()告诉我_valueprivate字段设置正确,但是。。。我现在在黑暗中摸索。。。有什么见解吗
先谢谢你
M.正如您所建议的那样,我正确地检索了数据,并将其与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);
.....
....
...
..
.
嗯,我不认为这是一个解决办法(没有冒犯的意思)。等待任意时间,然后设置值是一种容易出现竞争条件的黑客行为。就我个人而言,我会在表单组件上使用setValues,而不是手动设置各个字段的值。使用setValues时,表单是否尚未呈现并不重要。因此,给字段一个“name”属性,并在对象中引用该名称以传递给setValues。另一种方法是创建一个模型实例并使用setRecord。谢谢!我将在sencha上试用,一定有更强大的解决方案:)看起来像是这样