トップ «前の日記(2006-11-29) 最新 次の日記(2006-12-01)» 編集

日々の破片

著作一覧

2006-11-30

_ ASP.NETでJavaScript

いろいろ事情があって、onsubmitの時にバリデーションがOKだったらプログレスバーみたいなのを実装したくなったとする。なかなか結果が返ってこない時に動いているよを嘘でも表示する必要があるのだ。

で、MSDN読むんだけどクライアントスクリプトによるonsubmitへの介入方法がわからん。ButtonクラスのOnClientClickってのはあるのでそれにfoo();とか設定してみると、

onclick="foo();return asp_net_generated_bar_baz_bang();"

みたいになる。いや、おれはバリデーションの結果の動作を知りたいのだよ。で、生成されたHTMLをしげしげと眺めるとformのonsubmitが設定されているのがわかる。こいつが真を返した時にfoo()すりゃいいのだな。foo()は、おおざっぱには

var pos = 10;
var bias = 3;
function foo() {
    setInterval(function() {
        document.getElementById("progressBarNoTsumori").style.width = pos + 'px';
        pos += bias;
        if (pos > MAX_WIDTH) {
            bias = -3;
            pos = MAX_WIDTH;
        } else if (pos < 10) {
            bias = 3;
            pos = 10;
        }
    }, 500);
}

みたいなやつ。div要素を伸び縮みさせてプログレスバー代わりにとりあえずしとけみたいなハック(やっつけ仕事)。

さらにしげしげとHTMLを眺めてbodyのonloadとonunloadが未定義なのに気づいた。

function setupProgressbar()  {
    var org = document.getElementById('form').onsubmit;
    document.getElementById('form').onsubmit = function() {
        if (org()) {
            foo();
            return true;
        }
        return false;
    };
}
<body onload="setupProgressbar();" onunload="インターバルのクリア">

で、JavaScriptでは関数はファーストクラスオブジェクトだというのは、こういうことなのだな、と感じるのであった。

もちろんASP.NETならではのまっとうな方法もあると思うので、方法のご指摘は歓迎です。

_ Monoミーティング

おもしろかった。感想を書くより、ちょっとMonoをまじめに見ることにしようと思った。あとMVMのお話とかOSGIとか、知らないおもしろい世界がいろいろあるのだなぁとか。

_ COBOLのWeb DSL

知識が仕事で使ったCOBOL 74(73かも、と書いた瞬間にLPI-COBOLは8xだったと思い出したけど7xスタイルで書いたのだろう)で止まってるしすっかり忘れてしまったし思い出す気もないので適当なのだが、COBOLのWebアプリケーションってこうなってるんだよね?
html-section.
  01 html.
   03 body.
     05 table.
       07 TR occurs 30 times index by item-index.
         11 td-name      escaped X(10).
         11 td-price     pic  ZZZZZZZ9.
         11 td-quantity  pic  ZZZZZZZ9.
...
set-item.
   set item-index to 1.
   move record-name to td-name.
   move record-price to td-price.
   move record-quantity to td-quantity.
   if reocrd is not eof then
       set item-index up to 1
       set record-index up to 1
       goto set-item
   end.
exit-set-item.
...

(最初、全部大文字で書いたがあまりに読みにくいので全部小文字に変えてみたが、するとおもむきがなくなってしまった。微妙な言語であるな)

_ 言外の言

COBOLとRails』で、前田さんが(たぶん)書かれているが、なんでもできるプログラミング言語の中に簡素化して書くための仕組みが埋め込まれているものと、簡素化して書くことしかできないものの差はありますね(もちろん、callするものはCなどで書けるので「しかできない」は正しくないし、頑張ればできなくもないけど――bitで別の前田さんがCOBOLで再帰を書いたというようなことをコラムで書いていたのを読んだ覚えがある、でも全然やりかたはわからなかった、index付けされたレコードをスタックがわりに使ってperformするときに回すのかなぁ――想定外な使い方には無理がある)。

前者は公園の中の砂場とか砂漠の中のオアシスで外へ出るのも内へ入るもその人の選択にかかっているけど、後者は高い塀で囲まれた砂場(しかも猫が住んでいるのでへたに掘るとこわい)とか人工芝で覆われた中庭(建物への入り口には鍵がかかっていて一応ワイヤーハンガーが置いてある)で、同じことをやるのでも、使っていいよと言われて使うのと、これだけ使えと言われて使うのは、そりゃ違うよな、ということでしょう。そこに差がある。

本日のツッコミ(全2件) [ツッコミを入れる]
_ shugo (2006-12-01 00:42)

そうそう、Railsでwhyのsandbox使うようになって…なんてことはありそうにないですよね。

_ arton (2006-12-01 03:23)

それは辛い


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え