カテゴリ「 Flex 」最近のブログ記事

Accordion

| Category=Flex Category=Google

「アコーディオン」というのを使ってみる。Flash 地図を Flex 3 SDK で

「アコーディオン」というのを使ってみる。javascript 地図を jQuery 1.4 で

「アコーディオン」というのを使ってみた。けれど、あまり使い道がないような?

FLEX: 動的コンテンツ(2)

| Category=Flex

ひと月ほど前、フラッシュの使い回しを試した(FLEX: 動的コンテンツと変数(flashvars))。
今回は、プルダウン(ComboBox)で XML のすべての内容から特定の要素を選択してみる。

サンプルの XML ファイル参照。

まず取り込み

var ScoreXML:XML = XML(event.target.data);
var Score:XMLList = ScoreXML..Game;

そんでコンボ・ボックスに表示するデータ・プロバイダを指示

comboBox.dataProvider = Score;

プルダウンはこんなあんばい

<mx:ComboBox id="comboBox" prompt="Select Game..." labelField="@date" change="selGame(event);" />

スコアボードに表示する要素を特定する。id 代わりに日付を利用した

var gameDate:Object = comboBox.selectedItem.@date;
dataGrid.dataProvider = ScoreXML.Game.(attribute('date') == gameDate).children();

架空の野球の試合で例示したけれど、

  • ビデオを選択して再生
  • アルバムとして写真を表示

といった、何某かのアーカイブを掲示するケースに使えるかもしれない覚書、以上。

ところで、娘の携帯を機種変更。自分の携帯もすでに4年ほど使っているので Android 携帯 Nexus One いいかなとちょっと思ったが、しかし携帯は苦手だし機能の持ち腐れになるから意味がない。
で、銀座山形屋でスーツを買った。たぶん8年ぶりくらい。

ふつうスコアボードなんぞを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)

Loading...