Hatena::ブログ(Diary)

Cheese Pie

2009-03-03

jQueryでprototype.jsのbindみたいなの

jQueryでスコープを維持したままイベントリスナーを実行するのってどうすればいいんだろと思ってたんですが、bind()ってのがあるんですね。

var Sample = function() {
  this.initialize.apply(this, arguments);
}
Sample.prototype = {
  initialize: function() {
    this.message = "Hello world.";
    $("#foo").bind("click", {obj: this}, this.show);
  },
  show: function(event) {
    var self = event.data.obj;
    $("#bar").html(self.message);
  }
}
$(function() {
  new Sample();
});

bind()の第二引数オブジェクトで指定することができて、イベントリスナー側で受け取れます。

なので、thisを指定して受け取ればスコープ内のデータを使うことができます。

これに早く気づいていれば!

こんなの作っていちいち「$("#foo").click(applyFunc(this, this.show));」とかやってた。

var applyFunc = function(fn, context) {
  return function() {
    fn.apply(context, arguments);
  }
}

ドキュメントよーく見ないとダメですね。。。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/cheesepie/20090303/1236052133
リンク元