【问题标题】:create private var yada:Whatever; depending on xml count创建私有变量 yada:随便;取决于 xml 计数
【发布时间】:2010-01-29 19:22:53
【问题描述】:

我正在尝试声明将在我的 flex mxml 主应用程序的其他地方使用的私有变量。但我只需要在我的 xml 文件中的变量数相等时才创建变量。

我的 xml sn-p 看起来像这样:

<POIs>
    <location>
            <name>jane</name>
            <lat>12345</lat>
            <long>12345</long>
            <iconFile>jane_icon.gif</iconFile>
            <imageFile>jane_img.swf</imageFile>
            <motion>no</motion>
    </location>
    <location>
            <name>john</name>
            <lat>23456</lat>
            <long>23456</long>
            <iconFile>john_icon.gif</iconFile>
            <imageFile>john_img.swf</imageFile>
            <motion>no</motion>
    </location>
</POIs>

我的主要 flex mxml 文件如下所示:

//------------------------------------------------------------------------------0
private var locPointMarker0:PointMarker;
private var locPointMarker0_lat:Number;
private var locPointMarker0_long:Number;

//------------------------------------------------------------------------------1
private var locPointMarker1:PointMarker;
private var locPointMarker1_lat:Number;
private var locPointMarker1_long:Number;

//------------------------------------------------------------------------------2
private var locPointMarker2:PointMarker;
private var locPointMarker2_lat:Number;
private var locPointMarker2_long:Number;

//------------------------------------------------------------------------------3
private var locPointMarker3:PointMarker;
private var locPointMarker3_lat:Number;
private var locPointMarker3_long:Number;

当我的 xml 可能只有 500 个位置时,我不想声明 2000 个私有变量。

这是我的 xml 被添加到我的 flex 应用程序的方式:

public function getXMLData():void
{   
    var locXMLLoader:URLLoader = new URLLoader(locXMLURL);
    locXMLLoader..addEventListener(Event.COMPLETE, xmlLoaded);  
    function xmlLoaded(e:Event):void
    {
        try
        {
            locXML = XML(locXMLLoader.data);
            locXML.location.(parseLocXML(
                valueOf().name.toString(),
                parseFloat(valueOf().lat.toString()),
                parseFloat(valueOf().long.toString()),
                       valueOf().iconFile.toString(),
                       valueOf().imageFile.toString(),
                       valueOf().motion.toString()));
        } catch(e:Error)
        {
            trace("XML Load Error:  " + e.message)
            return;
        }
    }
}

public function parseLocXML(nodeName:String, lat:Number, 
            long:Number, iconFile:String, 
            imageFile:String, motion:String):void

{   
    if (XMLpCounter==0)
    {
    addMarkers(); ///this is just one of the functions that requires the private vars
    }
    XMLpCounter++;
}

我尝试了下面类似的代码,但它不起作用,因为 locXML 在解析之前没有真正定义。

//------------------------------------------------------------------------------1
if(locXML.location.length()>=1){
    trace("1 has been added as a variable");
    private var locPointMarker1:PointMarker;
    private var locPointMarker1_lat:Number;
    private var locPointMarker1_long:Number;}
            //------------------------------------------------------------------------------2
if(locXML.location.length()>=2){
    trace("2 has been added as a variable");
    private var locPointMarker2:PointMarker;
    private var locPointMarker2_lat:Number;
    private var locPointMarker2_long:Number;}

是否可以等到xml加载完毕再声明这些变量?

【问题讨论】:

    标签: xml apache-flex actionscript-3 memory variables


    【解决方案1】:

    您是否考虑过一系列地点。你的 2000 个变量让我头疼。

    位置.as:

    package my.locations.util    {
        public class Location {
            public var latitude;
            public var longitude;
            public var name;
            //... others, constructor
        }
     }
    

     var locations:Array = [];
     var locationsXML:XML = //...
     for (var locationXML:XML in locationsXML.location) {
         var location:Location = new Location(locationXML.latitude, locationXML.longitude, ...);
         locations.push(location);
     }
    

    【讨论】:

    • 我对数组了解不多。我会调查一下,看看我是否不能让它工作。谢谢...实际上,我也不完全了解课程。我是 Flash 编程的新手...接手了一个大型项目,并且一直在学习。
    • 您能帮我一个忙并重命名它们以匹配我的 XML 吗?我不知道如何将此代码应用于我的目的。数组对我来说没有意义。
    • 这是正确答案。任何时候你发现自己在写“myvar1”。 “myvar2”,您应该为它创建一个值对象并将它们存储在一个数组中。否则,如果您需要再添加 9 个“纬度/经度/名称”三元组怎么办?您必须编辑您的课程,而您不想这样做:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多