UJMLサンプル105:importとexportの話(2006/04/25)
今回から何回か、変数や関数を異なる<partition>で共有化する仕組について解説する。連続では無いかもしれないが。
UIEngineの最も重要な特長の一つとして、コンポーネントをネットワーク上に配置して後からロードできる仕組については何度か取り上げた。
ロードできたとしても、後からロードしたコンポーネントと、今走っているアプリとが値や関数を共有化できなければ意味が無い。そのための機構がimport,exportである。
例えば、下のサンプルのような形でステート変数、変数をexportできる。これは、別のコンポーネントと値を共有することを宣言している。<script>内で、_link()関数によりgVal.ujbcをロードする。このgVal.ujbc内でsLabel及びgValが使えるというわけだ。
<state-variables>
<state-var name="sLabel" type="boolean" access="export"/>
</state-variables>
<variables>
<var name="gVal" type="int" access="export"/>
</variables>
<script>
sLabel = false;
_link("test","build/gVal.ujbc");
</script>
Download 105_importexport.ujml
gVal.ujbc側のUJMLのソースコードは下の通りであり、sLabel,gValをimport宣言している。コメントアウトとしたsLabel2があるが、これは仮にsLabel2をimport宣言するとruntimeエラーが出る、という実験のために使ったものだ。
このgVal.ujbcがロードされると、<script>内が実行され、gValが1234となり、sLabelがtrueとなるので、_link()した側のsLabel変化による<label>の描画が実行される。詳細は105.importexport.ujml内を参照。
<ujml>
<partition>
<state-variables>
<state-var name="sLabel" type="boolean" access="import"/>
<!-- <state-var name="sLabel2" type="boolean" access="import"/> -->
</state-variables>
<variables>
<var name="gVal" type="int" access="import"/>
</variables>
<script>
gVal = 1234;
sLabel = true;
</script>
</partition>
</ujml>
Download gVal.ujml
このような形でimport,exportにより、異なる<partition>間での値の共有が可能となっている。
コメント