未だにNanoAを触っているわけですが、ずっと悩んでいたchecked問題を、解決させることが出来ました。
リファレンスの真偽判定の仕方がまずかったようです。
HTML::AutoFormのtディレクトリにあるテストコードを単純にCGIに置き換えてレンダリングしたところ、checkedの設定が生きませんでした。
テストコードを見てみると、formのrenderではなく、fieldのrenderでテストをしていました。
ということは、formのrenderに問題がある、という事になります。
しかし、追いかけていったところ、結果的にはHTML/AutoForm/Field/InputCheckable.pmに問題がありました。
formのrenderは、ポストしているデータがあれば、そのデータを配列のリファレンスで渡すことにしています。
こうすることで、初期値(プログラムに書いている値)ではなく、ポストされた値でレンダリングされるようになります。
InputCheckable.pmのrenderをよく見ると、リファレンスを受けている変数を真偽判定して、真ならば配列のリファレンスとみなして処理しています。
しかし、ここに問題がありました。
初期値のcheckedが生きないのは、ここが必ず真で判定される(リファレンスは真です)からです。
初期値の(formのrenderで空の配列のリファレンスが渡された)場合は、偽で判定して欲しいので、一度配列に入れてから、その配列を真偽判定(配列が空ならば偽になります)してやれば問題ないと思います。
これで、初期値の場合も、ポストした場合も、問題なさそうでした。
元々のテストも問題なく通っています。
|
|