RadioボタンでException

普通にRails上で書いたradioボタンをExt化しようとしたら,いろいろ問題がでてはまったのでメモ.

まずは普通にRailsでradioボタンを準備

<%= radio_button(:user, :sex, 1) %><label for="user_sex_1"></label>
<%= radio_button(:user, :sex, 2) %><label for="user_sex_2"></label>

この二つの要素をExt化したいとなると,多分下みたいな感じ.

var user_sex_1 = new Ext.form.Radio({applyTo:'user_sex_1'});
var user_sex_2 = new Ext.form.Radio({applyTo:'user_sex_2'});

まずこの状態でやってみると下記例外が発生.

[Exception... "'Error parsing selector, parsing failed at "]"' when calling method: [nsIDOMEventListener::handleEvent]" nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)" location: "<unknown>" data: no]
http://localhost:3000/javascripts/lib/ext-2.2/ext-all-debug.js?1217843684
Line 1689

これを見る限りでは,なんらかの要素に"["が入ってるからパースエラーだ馬鹿野郎と怒られてるみたいだ.
たしかに上のビューで書き出されるnameは"user[sex]"になる.
"["なんてのはnameくらいにしか入らないので,これを修正.
で,controllerかmodel側でごにょごにょしてあげるってことで以下のようにビュー側を変更

<%= radio_button(:user, :sex, 1, {:name => 'user_sex'}) %><label for="user_sex_1"></label>
<%= radio_button(:user, :sex, 2 {:name => 'user_sex'}) %><label for="user_sex_2"></label>

そうするとhtmlは

<input id="user_sex_1" type="radio" name="user_sex" value="1" /><label for="user_sex_1"></label>
<input id="user_sex_2" type="radio" name="user_sex" value="2" /><label for="user_sex_2"></label>

これでいけるだろうと思ってやってみると,まぁ表示は普通にできてる,けど要素をクリックすると,以下のエラー.

Ext.getCmp(el.dom.id) is undefined
http://localhost:3000/javascripts/lib/ext-2.2/ext-all-debug.js?1217843684
Line 28353

あれ,コンポーネントとして認識していない?

で,結果として自分の勘違いなのかなんなのか分からないけど,以下のように書かないといけないとコンポーネントとして認識してくれないみたいだった.

var user_sex_1 = new Ext.form.Radio({applyTo:'user_sex_1', id:'user_sex_1'});
var user_sex_2 = new Ext.form.Radio({applyTo:'user_sex_2', id:'user_sex_2'});

つまり,applyToだけでは一応Extオブジェクトとしては作るけど,idを指定しないとコンポーネントとしては登録しないよ,みたいな感じ.
他のTextFieldとかはapplyToだけでコンポーネントとして取れてたようなイメージがあったから,ちょっとはまってしまった.

試してみたら,id指定してないとTextFieldであってもEct.getCmpではコンポーネントとして取れないな…orz
にしてもそういう仕様だとしたら,コンポーネントをつくるときのidとhtml中のidは別っていうことか.
ちゃんと把握してないと混乱してしまいそうだなぁ.aliasとかkeyとかなんか別の名前がよかったな.


とりあえず,idを埋め込む簡単なお仕事を誰かに振るとしよう:-)

ヘッダーのロゴ変更

先日Macクリーンインストールする羽目になったので,Tracなどをローカルにインストールした.
その際以前はTrac標準のロゴ画像が表示されていたはずだけどバージョンアップに伴ってか,デフォルトでは表示されなくなっていた.
なので,とりあえず適当にロゴを設定する方法.

まず,Tracを準備する

$ mkdir project
$ trac-admin project initenv
reating a new Trac environment at /www/tracs/project

Trac will first ask a few questions about your environment 
in order to initialize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Project Name [My Project]> project

...

---------------------------------------------------------------------
Project environment for 'project' created.

You may now configure the environment by editing the file:

  /www/tracs/project/conf/trac.ini

If you'd like to take this new project environment for a test drive,
try running the Trac standalone web server `tracd`:

  tracd --port 8000 /www/tracs/project

Then point your browser to http://localhost:8000/project.
There you can also browse the documentation for your installed
version of Trac, including information on further setup (such as
deploying Trac to a real web server).

The latest documentation can also always be found on the project
website:

  http://trac.edgewall.org/

Congratulations!

てな感じで準備したら,trac.iniで画像を設定してね.と書いてある.

ので,設定してみる.

$ cd project
$ vi conf/trac.ini

trac.iniを開いたら,以下の箇所にロゴ画像のパスを設定

[header_logo]
alt = (please configure the [header_logo] section in trac.ini)
height = -1
link =
src = site/your_project_logo.png # <- ここを編集
width = -1

上の"your_project_logo.png"を任意の画像名に変更して,先ほど作ったTracディレクトリの"htdocs"に指定した画像ファイルを置いたらできあがり.

今更ながら使ってみる

今まで開発やってきて使ってないってのも変な話だけど,これまでは基本的にeclipse上でいろいろ開発をやっていた.確かに現在最も広がっている(と思われる)IDEなだけに,使いやすい.けどやっぱり重かったり,プラグインによってはうまく動いてくれなかったり,バージョンアップの度にいろいろ悩まされるのも,ちょっと面倒くさくなってきたので,先日id:akmさんから聞いたので,この際Emacsを使っていこうと思った.


というわけでちょっと覚えたコマンド類をメモ

ファイルとかウィンドウとか系

C-x C-f
ファイルオープン TABキーでパスの補完
C-x C-s
ファイルの保存
C-x C-b
バッファ一覧を新しいwindowで開く
C-x b
バッファ間の移動
C-x o
分割されたwindow間の移動
C-x 0
現在カーソルのあるwindowを閉じる
C-x 1
現在カーソルのあるwindow以外を閉じる
C-x 2
カーソルのあるwindowを縦に分割
C-x 3
カーソルのあるwindowを横に分割

操作系

C-a
行頭へ
C-e
行末へ
C-f
一文字右へ
C-b
一文字左へ
C-v
一画面下へ
M-v
一画面上へ
M-f
一単語分右へ
M-b
一単語分左へ

大体こんな感じくらいしかまだ使いこなせていないorz

lispに至ってはさっぱりだしなー.追々覚えていくとする.

Google Codeでファイルアップロードが

できないorz

なんでだろう.

一つにはプロジェクト名の先頭が数字で始まっていることが考えれられる.しかしアルファベットから始まるプロジェクトでもファイルのアップロードができない.302が返ってきているみたいだ.

軽いファイルならアップロードできることを考えると,なんらかの制限に引っかかってるのかなぁ.むぅよく分からない.


13:36--
ちょっとディレクトリを分けてアップロードしてみたら,railsの方のプロジェクトがアップロードできていないみたいだな.

15:00--
rails自体は問題ないみたいだけど,アップロードできないときの条件がさっぱり分からないな…

無事終了

8/9に1000speakers:6@Kyusyuというイベントがあったので,話す人で参加してきました.

普段発表することがほとんどない状況なので,緊張しまくりの発表でしたが,まぁなんとか無事終わってよかった.内容としてはPHPフレームワークAkelosのちょっとした紹介みたいな内容でした.

というより発表直前にMacbookが固まったりで,大丈夫かいなとも思いましたが,なんとか発表中は固まることがなかったのでよかった.終わってからネット見たりしてるときに固まりまくりだったけど.

とにもかくにも無事開催できて,終了できたのでよかったなぁと.今度は福岡で開催するような話もあったので,そのときは聞く人で参加して楽しもうと思います.

関係者の皆様お疲れさまでしたー