昨日と一昨日に亘って書いた、テキストボックスに入力した内容を表示するという
スクリプト。
完成に行きつくまでにか~~~な~~~~り~~~~~苦労したのです(;´・д・)。
それは、一昨日の投稿でも書きましたが、参考にしたスクリプトを、そのまま書いてある
スクリプトとGUIを忠実に作成してもきちんと動かないという事態に陥ったため。
今日は、エラーの内容とその解決編についてです。
■こんなエラーでした
丸3日程、下記のような状態で、どうにもこうにも先に進まず頭を抱えていました。
名前をテキストボックスに入力し、Clickボタンを押しても・・・
「undefined さん、こんにちわ!」と表示されます。
私には、ちゃんとした「松田優香」という名前があるっちゅーねん!!!
ボタンも機能しているし、メッセージは表示されているので、問題は、
”var txt = e.parameter.TextBox1;”
という構文で、正しく入力された値を取得できていないことは明白です。
■解決策は2つ
この状態を打開するには、次の2つのことが必要でした。
①GUIビルダーで”Panel”を配置すること
②GUIビルダーで配置したテキストボックスのプロパティ内、
「フォーム」の中にある「名前」に”TextBox1”と記入すること
①については、参考にしたサイトの一つに、次のような記述がありました。
addCallbackElement(panel1)で引数をパネルに設定している。ここがミソで、こうするとパネルに乗っかっているコントロールの全ての値がイベントハンドラであるsubmit(e)のeに入ってくる。
(引用: http://blache90.tumblr.com/post/7195167628)
テストしてみましたが、確かにパネルの有無で、「undifined」となるか否かが変わります。
次に、②について。
きっかけになったのは、下記の掲示板サイトです。
【stackoverflow】
http://stackoverflow.com/questions/10627839/gui-not-passing-values-to-spreadsheet
この一番下にある書き込みに、「IDだけではなく、フォーム属性の<名前>もきちんと
記入していることを確認!」というような内容がありました。
そこで、テキストボックスのプロパティで<名前>の箇所に”TextBox1”と記入すると、
やっと”undefined”の文字が消えてくれたのです。
”app.addCallbackElement()”や、”app.addClickHandler()”といったスクリプトは、
()の中にGUIの部品の【ID】を記入しますが、
”e.parameter”のあとの”.(ピリオド)”には、GUIの部品の【名前】を書くのですね。
■予約編
明日は、テキストボックスに入力された値を、スプレッドシートに記載されるようにしてみたいと
思います。