Javascriptで変数が配列かどうかチェックするには

var isArray = function(that){
  return (Object.prototype.toString.apply(that) === "[object Array]");
};

RequireJSのソースコードより。

追記
[1,2,3].toString()すると”[object Object]“が返って来ます。この挙動の違いについてはまだよく分かってません。

追記
あれ?これでもいけるのでは?

var isArray = function(that){
  return (that instanceof Array);
}

これならもう関数にする意味もないな。

追記
こんなんでもいいよね。

var isArray = function(that){
  return (that.constructor === Array);
}
Categories: HowTo's, Tips and Tricks | Tagged , , | Leave a comment

[未解決] JSのrequireで依存関係のロード完了を保証したい

RequireJSでこんなコードを書いてる。

page.html

<script>
require(["libA"], function(){
  libA.foo();
});
</script>

libA.js

// libB, libC, libD,...など不特定多数多数のライブラリに依存する
require(["libB", "libC", "libD"], function(){
  libA = {
    foo: function(){
      libB.something();
    }
  };
});

libB.js, libC.js, libD.js, libE.js…

libB = {
  // blah blah blah...
};

だがこのコードはほとんどうまく動くことがない(たまに上手くいく)。なぜなら、libAのrequireコールバックが呼ばれたときにまだlibB以降は使えない可能性が高いからだ。

普通ならHTML内のrequireで全部のライブラリを列挙すれば安全にロードできるのだが、ここではlibB以降のライブラリは場合によって必要なものと数が変わるからHTML内では列挙できない。

そこで、libB以降のライブラリの読み込みを保証してからHTML側の処理に入りたい。
どういうやり方が賢いだろうか。

こんな風に書けたらいいな

page.html

<script>
require(["libA"], function(){
  function(){
    libA.foo();
  }
});

libA.js

libA = {};
require(["libB", "libC", "libD"], function(){
  libA = {
    // blah blah blah...
  };
  loaded("libA");
});

要はファイルが読み込まれただけじゃなく、初期化が完了して使える状態にあることをローダーに対して伝えたいわけだな。ちょっと実装してみる。

Categories: Whatnot | Tagged , , | Leave a comment

Ruby-GetTextの三つのカッコ

_("Message")はメッセージを翻訳する。
n_("Car", "Cars", 2)は複数形判別つきの翻訳。
N_("Message")は何もしない。poを作るときにメッセージIDを拾わせるときに使う。

参考:Ruby-GetText-Package API Reference – YotaLab Storage

Categories: Whatnot | Tagged , , | Leave a comment

zshで大文字小文字を区別せず補完

.zshrcにこう書く。

zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
Categories: Uncategorized | Tagged , | Leave a comment

Blogit.vimからの投稿テスト

blogit.vimを入れてみたので投稿テステス。
追記追記。

Categories: Whatnot | Tagged | Leave a comment