我在向面板解析数据时遇到一个小问题,这是我的代码:
Ext.onReady(function(){
var stockings = [],i=0;
Ext.regModel('Carding', {fields: ['price'] });
var Detailsstore = new Ext.data.Store({
model: 'Carding',
proxy: {
type: 'ajax',
url: 'http://192.168.1.92/testapp/websample%20backup/sample/assets/www/XMLS/xmlformatses.xml',
reader: {
type: 'xml',
record: 'root'
}
},
listeners: {
single: true,
datachanged: function(){
Detailsstore.each(function(r){
stockings[i++]=r.get('price');
});
alert(stockings[3]);//This alert works fine
}
}
});
Detailsstore.read();
alert(stockings[3]);//this alert even being placed after the Detailsstore it shows undefined . . . . .
var showdetails = new Ext.Panel({
scroll :'vertical',
flex:7,
renderTo: 'bubbleCt',
baseCls: 'kiran',
stretchX: true,
html: '<span style="color:#fff; font-size:20px;"><span style="font-size:25px; font-weight: bold;">' + stockings[2] + '</span><br/><br/><span style="font-weight:bold;">Trading Action Plan :</span><br/>• Buy Price: 1 <br/>• Sell Price:2<br/>• Stop Price 80 cents<br/>• Rule: Sell 50% on double <br/>• 6% Trailing Stop Loss on stock<br/><br/><span style="font-weight:bold;">Volatility Analysis:</span><br/>• <br/>• <br/>• <br/><br/><span style="font-weight:bold;">Techincal Analysis:</span><br/>• <br/>• <br/>• <br/><br/><span style="font-weight:bold;">Fundamental Analysis:</span><br/>• <br/>• <br/>• <br/></span>',
});
var detailspanel = new Ext.Panel({
fullscreen: true,
padding:1,
layout: {
type: 'vbox',
pack: 'center',
align: 'stretch'
},
items: [showdetails]
});
});
上面的问题是,我首先尝试运行代码,第二个警报正在发生并显示未定义.........
我的目标是解析数据并将其显示在面板中。
但我认为问题是即使在商店完成操作之前,面板也会显示出来 第一个警报工作正常,并显示其中的值,但该操作发生在面板显示已经
之后请帮助
谢谢。 。 。 ..
答案 0 :(得分:5)
您的Ext.data.Store正被一个异步请求加载到您的服务器。它不会阻止JavaScript的执行,因此它会发出请求,但不会等待数据返回,然后继续执行脚本的其余部分(即警报,面板等)。
当商店加载时,它会触发事件'load'。当你得到这个活动时,那就是你想要制作你的面板等等。
Detailsstore.on('load', function() {
// do everything here.
// var showdetails = new Ext.Panel({ ...
// var detailspanel = new Ext.Panel({ ...
});
Detailsstore.read(); // <-- fire off the request for data AFTER you set up your 'load' handler
答案 1 :(得分:0)
ext商店在加载数据时会触发'load'事件。
向您的商店添加加载侦听器,并在加载事件触发后显示您的数据。
答案 2 :(得分:0)
如果要将数据存储或模型实例绑定到面板,则应该使用模板签出 - 这样您就不必检测datachanged,只需在组件上使用.update()。
另外:商店有一个autoLoad标志,可以避免你必须明确地执行read()。