LoginSignup
7
7

More than 5 years have passed since last update.

eventsからの検索が遅いのでDOMへ固定するdelegateEventsを書いた

Last updated at Posted at 2013-08-13

view.events からの走査が、モバイル端末だと #id を使っても遅いので、
Viewを破壊しない場合はDOMへ固定してしまうことにしました。

その際に events の設定をそのまま使えるようにするためのメソッド。

ほとんど Backbone.View.delegateEvents (v1.0.0) のコピィです。
Coffee である必要はありません。

delegateEventsFixedly: (events) ->
  return `(function(){
    if (!(events || (events = _.result(this, 'events')))) return this;
    this.undelegateEvents();
    for (var key in events) {
      var method = events[key];
      if (!_.isFunction(method)) method = this[events[key]];
      if (!method) continue;

      // Changed
      var match = key.match(/^(\S+)\s*(.*)$/);
      // /Changed
      var eventName = match[1], selector = match[2];
      method = _.bind(method, this);
      eventName += '.delegateEvents' + this.cid;
      if (selector === '') {
        this.$el.on(eventName, method);
      } else {
        // Changed
        this.$(selector).on(eventName, method);
        // /Changed
      }
    }
    return this;
  }).call(this);`

view.initialize で元の delegateEvents が実行されるのは仕方ないので、
その後にどこかで実行します。
もちろん undelegateEvents で消すことは可能です。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7