2013-07-23 37 views
0

在我的工作中,我們正在研究Java Flash Web應用程序,我們的後端系統將通過Web服務將XML發送到UI。 Web服務會將客戶佈局以XML格式發送到前端,UI將根據佈局XML中提供的窗口小部件ID呈現窗口小部件。我們的XML的例子有:Java Flash Web應用程序需要動態小組件的示例

<layout> 
<widget name="Scheduler Widget" widgetId="17ca7746-efbe-11e2-986e-e73d14d17dba"> 
<widget name="Scheduler Calendar" widgetId="5bcf13a0-efde-11e2-b031-bb52e5b1d05c"> 
<widget name="Scheduler Calendar Picker" widgetId="e1a430a4-eff3-11e2-8e64-4336a0ae0273"> 
<attribute name="file" value="picker.swf"/> 
</widget> 
<attribute name="file" value="calendar.swf"/> 
<attribute name="name" value="cal name"/> 
</widget> 
<attribute name="file" value="scheduler.swf"/> 
</widget> 
<widget name="Report Widget" widgetId="3a3cb820-efbe-11e2-93df-dbecb33fa407"> 
<attribute name="name" value="test"/> 
<attribute name="file" value="report.swf"/> 
</widget> 
</layout> 

裏閃存必須抓住屬性命名的文件和渲染swf文件的能力嗎?此外,如果該小部件具有更多屬性(如顏色,大小,位置等),那麼Flash是否可以使用該swf文件的這些屬性?

除了這些問題,有人可以提供一個如何實現這個問題的例子嗎?我不是Flash開發者,我只是在爲別人研究這個。我發現這是解釋說,Flash有是動態的能力:

Dynamic UI window drawing in Flash?

回答

2

最絕的。

讀取XML

var myLoader:URLLoader = new URLLoader(); 
myLoader.load(new URLRequest("ui.xml")); 
myLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
    var xml:XML = new XML(e.target.data); 
    trace(xml.layout.widget[2][email protected]); // traces "picker.swf" 
} 

讀取XML對象就像讀任何其它的層次結構,利用dot.notation,括號[索引]很多,但與有關訪問性能的添加@attribute標識符一個節點。這也有點奇怪,因爲只是識別(一般地)xml.layout.widget將事實上將小部件的每個實例及其內容作爲字符串返回。

閱讀這些爲完整的文檔:

Republic of Code: AS3 XML

Adobe Actionscript 3 Reference: XML


渲染

渲染這些部件是如何解釋這些數據的問題。從技術上講,您可以嘗試通過htmlwrapperhtmlText進行有限的HTML渲染,但我懷疑您會想要這樣做。更有可能的是,您將在Flash中創建自己的Widgets表示,並用XML定義這些Widget的通用偏差。

考慮下面的XML:

<?xml version="1.0" encoding="utf-8"?> 
<layout> 
    <widget 
     kind="Spinner" 
     name="Alpha" 
     color="0xFF0000" 
     x="100" 
     y="100" 
     width="50" 
     height="50" 
     file="foo.jpg" /> 
    <widget 
     kind="Slider" 
     name="Beta" 
     color="0x0000FF" 
     file="bar.swf" /> 
</layout> 

然後我們可以實現兩個類:SpinnerSlider已預定義的屬性和事件偵聽器。

package { 
    import flash.display.*; 

    public class Spinner extends Sprite { 
     private var defaults:Object = { 
      "x":10, 
      "y":10, 
      "width":50, 
      "height":50, 
      "color":0x000000 
     }; 



     public function Spinner(settings:Object = null) { 
      // Store the settings passed for any present defaults 
      for (var attribute:String in settings) { 
       if (defaults.hasOwnProperty(attribute)) { 
        defaults[attribute] = settings[attribute]; 
       } 
      } 

      // Update the appearance to match the settings. 
      with (defaults) { 
       graphics.beginFill(color, 1); 
       graphics.drawRect(x, y, width, height); 
       graphics.endFill(); 
      } 

      if (settings.hasOwnProperty("name")) { 
       this.name = settings.name 
      } 
     } 
    } 
} 

當我們讀取XML,我們會仔細檢查每個節點,並拉起該節點的屬性,並將其應用到類的構造函數...

function processXML(e:Event):void { 
    var layout:XML = new XML(e.target.data); 

    for each (var widget:Object in layout) { 
     switch (widget.kind) { 
      case "Spinner": 
       addChild(new Spinner(widget)) 
       break; 
      case "Slider": 
       addChild(new Slider(widget)) 
       break; 
     } 
    } 
} 

免責聲明:以這種方式訪問​​xml節點可能不正確。考慮它作爲僞代碼。在使用它們之前,我總是將我的xml作爲嵌套的對象/數組層次結構進行清理,所以我有點不習慣。

簡而言之,XML決定了我們對象的外觀,但是Actionscript規定了這些對象是什麼以及我們何時/如何將它們添加到屏幕上。

+0

因此,從Web服務獲取XML時,Flash可以從佈局XML呈現未知數量的小部件,並使用提供的屬性(如顏色,屏幕上的位置,小部件的大小等)動態呈現它們?順便感謝這個例子和參考資料。 :D – ColinMc

+0

查看答案的**渲染**部分。 – Atriace

+0

只是問,這是真的是什麼... ...四頁的介紹性文件和例子? – Papasmile

相關問題