More Related Content
Similar to お手軽Ajaxアプリケーションの作り方
Similar to お手軽Ajaxアプリケーションの作り方 (20)
More from Shunji Konishi (19)
お手軽Ajaxアプリケーションの作り方
- 15. 列挙型の生成
コンストラクタの引数はハッシュの配列
ハッシュにはname属性が必須
あとは任意に必要な情報をハッシュに含めてよい
//Enums
var CacheStatus = new Enum([
{ "name" : "Unprocessed"},
{ "name" : "Ready"},
{ "name" : "Found"},
{ "name" : "NotFound"},
{ "name" : "Error"}
]);
var GridKind = new Enum([
{ "name" : "Count", "path" : "/logcount"},
{ "name" : "Time", "path" : "/responsetime", "drawOnLoad" : "log-2"},
]);
//使用例
var status = CacheStatus.fromName($(“#selStatus”).val());
if (status == CacheStatus.Unprocessed) {
…
}
- 17. $.extendによるメソッド公開
function Chart(app, elementId) {
var currentData = currentKind = null,
lineCol = "ms";
← 最初に変数宣言
function lineName() {
← 内部で使用する関数定義がずらずらと続く
...
}
function lineColor() {
...
}
function axis2Name() {
...
}
function draw(kind, data) {
...
}
function changeLine() {
...
}
$.extend(this, {
← 外部に公開する関数の定義
"draw" : draw,
"changeLine" : changeLine
});
クロージャを公開する
ことでクラスのように扱
えるようにしているので
クロージャスタイルと
呼んでいる
}
- 32. アップロード - Form
こんな感じ
隠しフォームに必要なパラメータをhiddenで配置
Targetに非表示のiframeを指定
<form id="uploadForm" action="/xxxx"
method="post" enctype="multipart/form-data"
target="uploader”
style="position:absolute;top:0px;left:-1000px;">
<input type="hidden" id="upload_id" name="id"/>
<input type="file" id="upload_file" name="file” />
</form>
<iframe id="uploader" name="uploader" src=””
style="width:0px;height:0px;border:0px;"></iframe>
- 37. スクリプトの中身
ハッシュにひたすらメッセージを定義
Format用の関数を定義しておくと便利
if (typeof(flect) == "undefined") flect = {};
if (typeof(flect.app) == "undefined") flect.app = {};
if (typeof(flect.app.loganalyzer) == "undefined") flect.app.loganalyzer = {};
flect.app.loganalyzer.MSG = {
"name" : "名前",
…
"format" : function(fmt) {
for (i = 1; i < arguments.length; i++) {
var reg = new RegExp("¥¥{" + (i - 1) + "¥¥}", "g")
fmt = fmt.replace(reg,arguments[i]);
}
return fmt;
}
}
- 46. 実例 ー 再認証チェック
しかし実際に書かれたのはこんな感じのコード
CacheKeyはキャッシュのキーを管理するクラス
…
if (Cache.get(CacheKey.getReauthenticationKey(user.getId())) != null) {
…
}
言葉で説明する時にはあった「再認証」という用語が省略されて直接
キャッシュを読みだしている
間違ってない。間違ってないし関係者は全員何がやりたいのかはわかる
んだけど。。。コードを読むのに脳内コンテキストスイッチが発生する
コンテキストスイッチはコストの高い処理なので処理内容を理解するまで
にかかる時間はわずかながら増大するし、疲れる
処理内容を言葉で説明する際に「再認証」で済む所を毎回「キャッ
シュに再認証のキーがあったら」と言っていたらものすごいストレス
になるはず
要するにこれは最適化バグのようなもので、コンテキストスイッチをでき
る限り回避できるコードを書くことが重要