この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
二回目の記事投稿となります。新人エンジニアの はる です。
Ruby on RailsとFlashの連携方法はいくつかありますが、
今回は、Ruby on RailsとFlash(ActionScript)のXML連携について書いてみたいと思います。
Rails側とFlash側の作業は、
[Rails]REXMLを使用してxmlを生成する。
[Flash]XML.loadメソッドを使用して、xmlを読み込む。
となります。
[Rails]
XMLを生成するためにREXMLを使用します。
REXMLについては脆弱性が発表がされておりますので、本サイト内の記事
「REXMLの脆弱性」を参照し、脆弱性対策を行ってから使用して下さい。
まず、Rails側でXMLを生成します。
#Rails XML生成メソッド
def get_xml
xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><data />\n"
doc = REXML::Document.new( xmlString )
#items
items = REXML::Element.new("items", doc.root)
i = 0
10.times do
item = REXML::Element.new("item", items)
title = REXML::Element.new("title", item)
title.text = "タイトル#{i}"
value = REXML::Element.new("value", item)
value.text = "hoge#{i}"
i += 1
end
send_data doc.to_s, :type => 'text/xml', :filename => 'doruby.xml'
end
#doruby.xml
<?xml version='1.0' encoding='UTF-8'?>
<data>
<items>
<item>
<title>タイトル0</title>
<value>hoge0</value>
</item>
<item>
<title>タイトル1</title>
<value>hoge1</value>
</item>
<item>
<title>タイトル2</title>
<value>hoge2</value>
</item>
・・・(中略)・・・
<item>
<title>タイトル9</title>
<value>hoge9</value>
</item>
</items>
</data>
Rails側でのXML生成の作業は以上です。
次にFlash側でXMLを読み込みます。
[Flash(ActionScript)]
loadData(http://localhost:3000/"controller名"/get_xml);
//loadData("doruby.xml");
function loadData(filename) {
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadingDone;
xmlData.load(filename);
}
function loadingDone() {
getData(xmlData);
_root.nextFrame();
}
function getData(node) {
items = node.firstChild.childNodes[0];
_root._items = new Array();
for (var i = 0; i<items.childNodes.length; i++) {
_root._items[i] = new Object();
for (var j = 0; j<items.childNodes[i].childNodes.length; j++) {
node = items.childNodes[i].childNodes[j];
if (node.nodeName == "title") {
_root._items[i].title = node.firstChild;
} else if (node.nodeName == "value") {
_root._items[i].value = node.firstChild;
}
}
}
}
_root._items[i].titleにアイテムのタイトル、_root._items[i].valueにアイテムの値を格納しています。
きちんと読み込まれているかどうか確認するには
下記のtraceアクション等でFlashの出力ウィンドウ上から確認できます。
for (var i = 0; i<_root._items.length; i++) {
trace("_root._items["+i+"].title = "+_root._items[i].title);
trace("_root._items["+i+"].value = "+_root._items[i].value);
}
以上、Ruby on RailsとFlash(ActionAcript)のXML連携について、ご紹介させていただきました。
次回は、Flash(ActionAcript)の”LoadVars.sendAndLoadメソッド”を使用した
Ruby on RailsとFlashの連携について書きたいと思います。