[mayaa-user:872] Re: PathAdjusterの挙動について

suga [E-MAIL ADDRESS DELETED]
2009年 12月 13日 (日) 21:40:20 JST


suga です。


2009/12/12 Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>:
> このとき、PathAdjusterによる調整は、テンプレートをパースする1回だけしか行われないようです。
> (略)
> としてしまうと、一回「// 何らかの処理」によって確定したresultを
> その後の画面で使い回してしまいます。

PathAdjuster はビルド時に呼ばれるものであり、「使い回す」のではなく
「テンプレートにそう記述されていたことにする」ものです。
このためレンダリングのパフォーマンスに影響を与えることなく
絶対パスへの置き換えが可能です。


> テンプレート側での相対パスでは期待通りなるのですが、
> mayaaファイルに記述した動的な要素に関してもPathAdjusterが働きます。
> <m:echo m:id="SOME_IMAGE">
>        <m:attribute name="src" value="${getSomeImage()}" />
> </m:echo>
>
> その結果、m:idに紐付けられたimgタグのsrc属性は、実行時には以下のようになってしまいます。
> <img src="${Packages.mycompany.MyPathAdjuster.something(\"" + result + "\")}" />
>
> このように、${...}の部分を再展開してくれません。
> この挙動は仕様でしょうか?

はい、想定通りです。
上記のコードは「レンダリング時に」getSomeImage()を実行するという記述だからです。


> 動的な要素に関してはプログラムでどうにできるので、
> 必ずしも自動調整は必要ではありません。
>
> むしろ働かないようにしたいです。
> PathAdjusterで、テンプレート側から呼ばれたのか、mayaaファイルから呼ばれたのか
> 制御できても良いと思います。isOnTemplate()は違うようですね?

mayaa にあるかどうかではなく、元の値のルールで判断できるのでは
ないでしょうか。
標準の PathAdjusterImpl では、"./" で始まるかどうかを見て、対象か
どうかを判断しています。force="true" にするとこの判断を省略して
パス調整をします。

たとえば path が "${...}" という値であれば super を通さない、などの
処理をすれば良いでしょう。

mayaa に記述されているかどうかが必要になるケースはほぼ無いと思います。
実際には mayaa かどうかではなく何が記述されているかが判断基準でしょう。


-- 
suga ( [E-MAIL ADDRESS DELETED] )


mayaa-user メーリングリストの案内