backbone.jsでtooltipを表示する
backbone.jsのサンプルプログラムでtooltipを表示していたので、どういう処理になっているのか読んでみました。
せっかく読んだので、わかりやすいように関連する箇所だけのサンプルにしてみました。
$(function(){ var AppView = Backbone.View.extend({ el: $('body'), events: { "keyup #new-input": "showTooltip" }, initialize: function() { this.input = this.$("#new-input"); }, showTooltip: function(){ var tooltip = this.$(".tooltip"); var val = this.input.val(); tooltip.fadeOut(); if (this.tooltipTimeout) { clearTimeout(this.tooltipTimeout); } if (val == '' || val == this.input.attr('placeholder')) { return; } var show = function(){ tooltip.show().fadeIn(); }; this.tooltipTimeout = _.delay(show, 1000); } }); window.App = new AppView; });
ここに置いています。
http://dl.dropbox.com/u/494487/backbone-sample/tooltip/index.html
テキストボックスでのkeyupイベントにコールバックを紐付けて、コールバックは1秒遅れてツールチップを表示しています。
ただしテキストボックスの入力が空でない場合や、placeholderと同じ値が入力されている場合は表示されません。
eventsって?
Backbone.ViewのdelegateEvents。
Backbone.Viewではeventsに{"event selector": "callback"}のハッシュを指定することによって、イベントハンドリングができます。
この例では、#new-inputの要素にkeyupイベントが発生したとき、showTooltipがコールバックされます
this.$って?
initializeではjQueryで、#new-inputの要素を取得しています。
jQueryが読み込まれている場合、Backbone.Viewではthis.$(selector)で、viewのelementをcontextとして、要素指定ができます。($(selector, this.el)と同等)
underscore.jsのdelay
showTooltipの処理はほとんどjQueryですが、delayというunderscore.jsが使われています。
_.delay(function, wait, [*arguments])
functionをwaitミリ秒後に処理します。