いざっ、セルの値計算!
っと思ったんだけど、型変換と型に応じた対応と、いろいろ考えることがあったので頭の中で考えながらエラー表示の部分をブラッシュアップしてみた。
最初に作ったモジュールだと普通にalert使ってエラーって出してた。
if (/^=.*([A-Z]+\d+).*/.test(edit_val)) {
if (editable_table.LoopCheck(adrs)) {
alert("循環参照を検出しました。\r\nセルの内容を修正し直して下さい。");
$(this).focus();
editable_table_val[adrs] = rollback;
return
}
}
こんなこと都度やってたら、これからセル計算でいろんなエラーでた時にソースが爆発するなーと思ったので、動作をキャンセルして強制的に戻すのではなくエラーをセルに表示してあげることにした。
セル計算する関数(CellCalculation)を別で用意して、その中の1パターンとして循環参照を入れとく。
エラー出す関数(CalculateExeption)もセットで用意しとく。
CellCalculation: function(adrs) {
var $div = $("td[data-address='" + adrs + "'] > div:first");
var val = editable_table_val[adrs].value
if (/^=.+/.test(val)) {
var cells = [];
if (editable_table.RootExists(adrs, cells)) {editable_table.CalculateExeption(adrs, "循環参照")}
// 本当はここにセル計算する処理を書きたい。
$div.html(val);
} else {
$div.html(val);
}
},
CalculateExeption: function(adrs, err_val) {
var $span = $("<span />").append(err_val).addClass("calculate-exeption").hide();
$("td[data-address='" + adrs + "'] > div:first").html(editable_table_val[adrs].value).append($span);
$span.fadeIn(1000);
}
エラー表示のスタイルはこんな感じかなー?
セルの右下の方にピンクっぽく出てくる的な。
.editable-table td span.calculate-exeption {
font-size: 9px;
position: absolute;
z-index:9990;
opacity: 0.7;
right: 0px; bottom:0px;
background:hotpink;
-webkit-border-radius:20%;
-moz-border-radius:20%;
-ms-border-radius:20%;
border-radius:20%;
}
さて、これでセル計算の中で他のエラーに行き当たっても同じフレームでエラー処理できるぞっ。
じっくり計算ロジックについて考えよう。
