2017年1月14日土曜日

面倒だ

4年ほど前に、某社におさめたcakePHPで書いたシステムを他でも使いたいという嬉しい話をいただいた。ホストは、windowsでもmacでもLinuxでも動くし、クライアントもsafari,chrom,ieなどではテストしている。帳票や会社名をちょっと直して、プリンターの設定をすれば、とりあえず仕事は終わりなのだ。しかしメインの開発環境がmacであったため、MacのOSアップデートとともに、開発環境が動かなくなっているのである。なんとか環境を作り直したが、フレームワークとpostgresqlのバージョンが少しちがっている。現状のシステムは、windowでうごいているので、テスト環境はなんとかwindow上に構築できた。4年間で、webアプリの環境もかなり変わってきているし、今後もメンテナンスが必要なら、最新のフレームワークに置き換えたいとこである。でも費用はどこからもでない。勉強を兼ねて、Angular?+Laravel ? Rails? Code Igniter? cakePHP? Python? で作り直すかな。

JavaScript let

ES6で追加になったJavaScript letの例として下記のコードが出てた
var list = document.getElementById("list");

for (let i = 1; i <= 5; i++) {
  let item = document.createElement("li");
  item.appendChild(document.createTextNode("Item " + i));

  item.onclick = function (ev) {
    console.log("Item " + i + " is clicked.");
  };
  list.appendChild(item);
}

letのところをvarにすると、どの行をクリックしても"Item 6 is clicked."となってしまう。
letなら上手くいく。

さてwindows7あたりのIEだとまだletがサポートされてなくて上手くいかない。
  a="Item " + i + " is clicked."
  item.onclick = function (ev) {
    console.log(a);
  };
 なんてすると、なぜか上手く動いてしまう。IEの不具合だとおもう。現在のchrom等のブラウザだと上手くいかない。

昔書いたコードにたまたま動いているやつがいて、ブラウザが新しくなると動かなくなるるのではないかとヒヤリとしている。

昔の環境での正解はなんだろう。タグのプロパティー(例えばvalue)としてiの値を埋め込んでやり、実行時に読み出すのかな。