Backboneで1つのeventに複数のcallbackを指定
現状だと、オブジェクトリテラルに文字列のセレクタをキーに指定してるので
こんな書き方すると上書きされちゃう
events: { 'click .button': 'foo', 'click .button': 'bar' }
こう書けるようにしたい
events: { 'click .button': ['foo', 'bar'] }
該当箇所をこんな感じに書き換えたらいける
delegateEvents: function(events) { if (!(events || (events = _.result(this, 'events')))) return this; this.undelegateEvents(); for (var key in events) { var methods = _.isArray(events[key]) ? events[key] : [events[key]]; _.each(methods, _.bind(function(method) { if (!_.isFunction(method)) method = this[method]; if (!method) return; var match = key.match(delegateEventSplitter); var eventName = match[1], selector = match[2]; method = _.bind(method, this); eventName += '.delegateEvents' + this.cid; if (selector === '') { this.$el.on(eventName, method); } else { this.$el.on(eventName, selector, method); } }, this)); } return this; },
これ既に何回か議論されてて
中の人的に、ハンドラー内に書けば良いって結論に至っていた。
https://github.com/jashkenas/backbone/pull/2650
events: { 'click .button': 'foobar' }, foobar: function() { this.foo(); this.bar(); }, foo: function(){}, bar: function(){}
惜しい。。
- 作者: 高橋侑久
- 出版社/メーカー: ラトルズ
- 発売日: 2013/04/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る