戯言

つらつらと気づいたことを書いていきます。人狼とか。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JSONとの相性が抜群!クライアント側でのメッセージ定義方法


最近のWebアプリは、サーバはJSONを吐く機械と化しており、クライアントサイドでサーバから得たデータからViewを作ることが多いのではないでしょうか。最近のネットワーク広帯域化や、クライアントマシンのスペック向上などに伴い、サーバから一括でデータをもってきて、クライアント側でゴリゴリ処理する、となりつつあります。
このようなシステムでは、クライアント側Javascriptでの処理が多くなるため、「○○を更新しました」、「○○は必須入力です」などのメッセージなども、Javascript内に情報を保持しています。これらのメッセージをスマートに定義する方法として、私はcprintfというjavascriptのライブラリを利用しています。
//メッセージの定義
var MSG_YYYYMM_OUTPUT = %{year} 年 %{month} 月のデータを出力しました。

//メッセージの表示
data = {year:2013, moth:10};
alert( cprintf(MSG_YYYYMM_OUTPUT, data) );
cprintfの第2引数には、JSONデータをそのまま指定できるので、サーバから取得したJSONデータをそのままメッセージ表示用に利用することもできます。
//メッセージの表示(angularjsでRESTリクエスト版)
$http({	method: GET,
		url:/getData,
		}) 	
.success(function(data){
	alert(cprintf(MSG_YYYYMM_OUTPUT, data));
})
JSONでデータ送受するRESTなどとは、抜群に相性が良いです。

スマートに書けてると思うのですが、いかがでしょうか。

cprintfは、こちらのサイトで提供されています。
http://anon21.qlookblog.net/20101007.html








スポンサーサイト

Firefoxではjavascriptでwatchという関数名を使えない話


Firefoxユーザの方から、入村はできるけど、観戦だけできない!とのバグ報告。

そんなわけないだろー、と思いながら、久々にFirefoxをたちあげて確認したところ、おっしゃるとおりでした。
ごめんなさい。

でも、IEもChromeも問題ないのに、Firefoxだけおかしいって・・・?
しかも、入村はできてるのに、観戦だけできないって・・・。

今回の修正では、観戦の機能は変更しておらず、思い当たるのは、関数名を変えたことくらい。
観戦は watch() という関数で定義してたんですが、まさかと思い watch2() などと適当に変えてみたら、
動くようになりました。

うーん。。。watch は予約後なのか!?

Firefoxでは、javascriptでwatchという関数名は使えないので、ご注意を。

emulateIE7と、$(window).keydownはNGな話


IE10を使ってると、「>>1」などの参照表示が出ないって指摘が以前にありました。表示には、overlibというjavascriptのライブラリを使っていたので、おそらく原因は、このライブラリが最近のIEのレンダリングとの互換性がないことです(詳しく調べてないです)。そこで、「IEの互換表示を使って下さい」ってことでお願いしていました。

昨日(7/13)のリリースで、IEではIE7表示を強制するようにしてみました。
変更箇所は、HTMLヘッダで以下を渡すようにしただけです。

X-UA-Compatible: IE=emulateIE7

これで、ブラウザがIE7標準準拠モードとして解釈してくれるので、互換表示に手動設定しなくとも、「>>1」などの参照表示が正常動作することが確認できました。



ところが、今度はShift+↑などが効かないとのご報告。
きっと、IE7互換では、動かないコードがあったのだろうと思ったんだけど、パッと見た感じでは特にバージョン依存になりそうなコードは書いてない。
で、さらに調べていたら、こんなのが。

http://bugs.jquery.com/ticket/10621

$(window).keydownイベントを拾えてないんですね。

W3C DOM2 では、イベントがwindowまでバブリングするようには定められてないので、$(window).keydownを拾えないのは、仕様としては間違いないみたい。
jQueryとしては、仕様とおりに作ってるので、悪くはない。



いろんなサイトや参考書で、$(window).keydownってのを見かけるけどね…。
やっぱり、サイトを参考にするのも良いけど、きちんと元の仕様も読まないとダメですね。

$(window).keydown を $(document).keydown に修正して解決。今度、修正版をリリースします。




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。