このコンテンツを表示するためには、無償の Adobe Flash Player が必要です。ダウンロード

« Editable Map    クライアントロケーション »

FLEX: 動的コンテンツと変数(flashvars)

| Category=Flex | Comment

ふつうスコアボードなんぞをHTMLで書こうと思ったら、table - tr - td の繰り返しで作る。が、これは冗長にして冗漫なコードを書かなければならずカッタルイので、私は好かない。しかも、1回きりならともかく、何試合も続いたらイヤになること必至。

だったらスコアボードをフラッシュで作り、データのみ差し替えていけばいいじゃないかと。

flashvars で変数("game=091209")を渡し架空の試合を表示。元データの外部 XML ファイルは次のよう

<?xml version="1.0" encoding="utf-8"?>
<Score>
  <Game id="091209" stadium="Citi Field" date="2009/12/09">
    <Orioles first="2" second="0" ..... ninth="0" final="5" pc="Uehara-Tatum" note="2B: Jones" />
    <Mets first="0" second="1" ..... ninth="4X" final="8" pc="Santana-Santos" note="HR: Delgado" />
  </Game>
  <Game id="091210" stadium="Tiger Stadium" date="2009/12/10">
    <Yankees first="1" ..... ninth="0" final="4" pc="Pettitte-Posada" note="3B: Rodríguez, 2B: Matsui" />
    <Tigers first="2" ..... ninth="2X" final="6" pc="Verlander-Laird" note="HR: Polanco, 2B: Ordoñez" />
  </Game>
</Score>

「特定のノードを選んで表示するだけだからカンタンだろう」、と高を括っていたらツボにはまった。
案外、ネットを検索しても情報がない。Adobe の Livedocs は敷居が高く、血圧も高くなる。

(1) 変数を引きずり込む。行末の「game」がパラメータ

gameID = Application.application.parameters.game;

(2) 任意の node を指定。属性「id」の値が上のパラメータに一致する「Game」要素を選ぶという理屈

dataGrid.dataProvider = xml.Game.(attribute('id') == gameID).children();

データプロバイダに変数を代入するにあたり、シロウトの悲しさゆえ勘違い

[Bindable]
public var gameID:String;

String ではなく Object やないか! と気づいた時には肩が凝っていた。中年の悲哀。
で、別の id 値「091210」を渡せばそのデータが表示されるという按配

というふうに一粒で何度もオイシイ。毎回コンパイルなんかやってらんねぇ。
あとは入力用の php フォームを設け、SimpleXML で要素(と属性)を追加していくだけ。手間要らず。

MXML のソース(抄、Open / Close)

« Editable Map    クライアントロケーション »