ページシリアライズ時のバグを修正
加藤さんの手により、シリアライズされたページ情報をデシリアライズした場合に起きる問題が修正されました。遅くとも今週末には 1.1.20 としてリリースします。
この問題が起きるのは、下記の条件をすべて満たす場合です。
- エンジン設定で pageSerialize を true にしている (ビルド結果キャッシュ)
- .mayaa ファイル側のルート直下に html を書いている
正直に言うと、後者の記述方法は実装の都合でたまたま動作するだけです。とはいっても今からこれを排除するのは現実解としては良くないだろうということで、これからも動作はします。
上の文章だけでイメージできない方のために例を挙げると、下記のような記述をするということです。
HTML ファイル <ul m:id="loop"> <li>foo</li> <li>bar</li> </ul>
Mayaa ファイル <ul m:id="loop"> <m:foreach items="${...}" var="..."> <li style="<m:write value="${...}"/>"><m:write value="${...}"/></li> </m:foreach> </ul>
問題となるのは、Mayaa ファイル側の <ul m:id="loop"> の部分です。これを m:element で書いた場合には問題は起きません。(ビューとロジックの分離という意味では問題あり過ぎですが)
ちなみにこれを Mayaa 的な記述で実現するには下記のようになります。
HTML ファイル <ul m:id="loop"> <li m:id="loopListItem"><span m:id="loopListBody">foo</span></li> <li m:id="dummy">bar</li> </ul>
Mayaa ファイル <m:echo m:id="loop"> <m:forEach items="${...}" var="..."> <m:doBody /> </m:forEach> </m:echo> <m:echo m:id="loopListItem"> <m:attribute name="style" value="${...}" /> </m:echo> <m:write m:id="loopListBody" value="${...}"/> <m:null m:id="dummy"/>
基本的にはプロセッサの記述を一行で済むようにする (↑の m:write のように) のが良いのですが、ループとループするタグの属性値が絡むとどうしても冗長に見える記述になってしまいます。これをどのくらい面倒くさいと思うかは、ビューとロジックをどのくらい大切にしているかによるでしょう。