Notes開発者のためのXPagesデザインレシピ

簡単でCoolなXPagesアプリケーションを作るための情報を発信していきます

コーディング

XPages with jQuery なぜID指定でjQuery!が動かないのか? Part2

image

XPageのID指定は{id:要素名}???

前回はXPageから出力されたidを使ってjQueryを動かしました。しかし、あのidってちょっと不安じゃないですか?法則がよくわからないし・・・。XPagesの情報を見るとJavaScriptでコントロールの要素を取得するには、{id:要素名}と書かれています。例えば素のJavaScriptでテキストコントロールの値を取得するにはこんな風に書きます。

var subject = document.getElementById("#{id:Subject}").value;
alert(subject);

これをjQueryで書き換えてみましょう。前回やったようにコロンはバックスラッシュ2つでエスケープするんでしたね。

var subject = $("#{id\\:Subject}").val();
alert(subject);

起動!

image

動きません。

#{id:要素名}はDominoが変換した後、出力される

通常のid指定と、#{id:要素名}形式で指定した場合のid指定は何が違うのでしょう?XPage上で指定された”#{id:Subject}”のid名はDominoサーバーに変換され、HTML上では”view:_id1:Subject”という形で出力されます。

image

先ほど見た通り、XPage上の#{id:要素名}にはバックスラッシュで:(コロン)をエスケープすることが出来ませんから、出力された後の”view:_id1:Subject”に対して、:(コロン)の前にバックスラッシュを入れる処理を行う必要があります。

:(コロン)を\\:(バックスラッシュ×2コロン)に変換する関数を作ろう

#{id:要素名}形式で記述する場合、Dominoサーバーが変換した結果に対して、バックスラッシュでエスケープを行う必要がありますから、変換用の関数を作ります。引数で渡されたid(Domino変換後)に、JavaScriptで:(コロン)の前にバックスラッシュを入れます。その後、id指定を表すための#を追加し、$()で囲むことでjQueryオブジェクトを取得します。関数名に$が付いていますが、JavaScriptでは$も関数名、変数名に使えます。x$の意味としてはx-XPagesを表し、$がjQueryを表しています。関数名は好きに変更して貰って良いと思います。

function x$(idTag){
	//正規表現を使って:を\\:に変換
	idTag = idTag.replace(/:/g,"\\:");
	//変換結果の先頭に#を付けid指定とし、$()で囲むことでjQueryオブジェクトを返す
	return($("#"+idTag));
};

完成

先ほど作った関数を使って、jQueryオブジェクトを取得した形で、最初に作った処理をjQueryで記述するとこのようになります。

var subject = x$("#{id:Subject}").val();
alert(subject);

view8

動きました!!

次回予告

次回はjQueryの基本的なことについて書いていきます。