数据提供商问题

时间:2011-08-02 09:48:45

标签: actionscript-3

在运行以下代码时,我收到如下错误消息,

function urlLoader_complete(evt:Event)
{
    XMLdata=(evt.target.data).toString();
    XMLdata=XMLdata.split("&lt;").join("<");
    XMLdata=XMLdata.split("&gt;").join(">");
    xml=new XML(XMLdata);
    **fnctn();**
}

function fnctn() 
{
    var tp:int = bulb1 + bulb2 + bulb3 + bulb4;
    if(tp == 1)
    {
        **gep.addItem(new Object());**
        gep[gep.length-1].voltage1 =evt.result.Array.Voltage.Val;
        gep[gep.length-1].current1 = evt.result.Array.Current.Val;
        gep[gep.length-1].voltage2 = 0;
        gep[gep.length-1].current2 = 0;
        gep[gep.length-1].voltage3 = 0;
        gep[gep.length-1].current3 = 0;
        gep[gep.length-1].voltage4 = 0;
        gep[gep.length-1].current4 = 0;
    }

错误是

ReferenceError: Error #1065: Variable evt is not defined.

at vi_fla::MainTimeline/fnctn()[vi_fla.MainTimeline::frame2:449]

at vi_fla::MainTimeline/urlLoader_complete()[vi_fla.MainTimeline::frame2:436]

at flash.events::EventDispatcher/dispatchEventFunction()

at flash.events::EventDispatcher/dispatchEvent()

at flash.net::URLLoader/onComplete()

上面的代码中标出了有错误的两行......这个错误的原因是什么?

** * 更新 * < / EM> ** * ****

现在我修改了以下代码。

function fnctn(evt:Event)

{ var tp:int = bulb1 + bulb2 + bulb3 + bulb4;

if(tp == 1)

{

   ChartDataProvider1.push(xml.Value.Array.Voltage.Val.text())

ChartcategoryNames.push();

trace("value= "+xml.Value.Array.Voltage.Val.text())

}

}

现在运行时没有错误,但跟踪值没有显示任何值。它显示为Value =

如何解决这个问题?

** * **** 更新 < EM> * ** * ** * ** * ****

我修改了以下代码

var ChartcategoryNames:Array = new Array();

var ChartDataProvider1:Array = new Array();

var lineArray1:LineSeries = new LineSeries();

if(tp == 1)

{

                            ChartDataProvider1.push(xml.graph.Voltage.text());

            ChartcategoryNames.push();

            trace("hi= "+xml.graph.Voltage.text());

                         yAxis = new NumericAxis();

            yAxis.maximum=10;

            yAxis.minimum=0;

            yAxis.majorUnit=2;

            Exp_Content.input_mc.in_graph.verticalAxis=yAxis;

            //Exp_Content.input_mc.in_graph.dataProvider=ChartDataProvider1

                        lineArray1.dataProvider=ChartDataProvider1;

}

现在trace hi显示正确的值,这也可以在ChartDataProvider1.But中找到。但lineArray1没有任何值...请为此问题提出解决方案..

3 个答案:

答案 0 :(得分:3)

如上所述,在函数fnctn中,您使用的是名为evt的变量,该变量未定义。

evturlloader_complete中的传入事件对象,因此该函数是本地的。将所有代码放在事件处理程序中,或将事件对象传递给fnctn

function urlLoader_complete(evt:Event)
{
    XMLdata=(evt.target.data).toString();
    XMLdata=XMLdata.split("&lt;").join("<");
    XMLdata=XMLdata.split("&gt;").join(">");
    xml=new XML(XMLdata);
    fnctn(evt);
}

function fnctn(evt:Event) 
{
    ...

答案 1 :(得分:2)

你需要传递你的活动:

fnctn(evt);
...
function fnctn(evt : Event); 

答案 2 :(得分:0)

function urlLoader_complete(evt:Event)
{
  XMLdata=(evt.target.data).toString();
  XMLdata=XMLdata.split("&lt;").join("<");
  XMLdata=XMLdata.split("&gt;").join(">");
  xml=new XML(XMLdata);
  fnctn(evt);
}

function fnctn(evt:Event) 
{
   var tp:int = bulb1 + bulb2 + bulb3 + bulb4;
   if(tp == 1)
   {
     **gep.addItem(new Object());**
     gep[gep.length-1].voltage1 =evt.result.Array.Voltage.Val;
     gep[gep.length-1].current1 = evt.result.Array.Current.Val;
     gep[gep.length-1].voltage2 = 0;
     gep[gep.length-1].current2 = 0;
     gep[gep.length-1].voltage3 = 0;
     gep[gep.length-1].current3 = 0;
     gep[gep.length-1].voltage4 = 0;
     gep[gep.length-1].current4 = 0;
  }
}

试试这个,希望这会对你有帮助。