Add $.fn.bindKey, which works on any jquery-wrapped element.

If given a string as an action, it attempts to call a method by that name on the element's view object. If given a function, it calls it directly.
This commit is contained in:
Nathan Sobo
2011-12-30 12:33:55 -06:00
parent dc38a0e375
commit 5273cb0638
4 changed files with 32 additions and 5 deletions

View File

@@ -18,11 +18,6 @@ class FileFinder extends Template
@bindKey 'up', 'moveUp'
@bindKey 'down', 'moveDown'
bindKey: (pattern, methodName) ->
@on 'keydown', (event) =>
if window.keyEventMatchesPattern(event, pattern)
this[methodName]()
populateUrlList: ->
@urlList.empty()
for url in @findMatches(@input.val())

View File

@@ -51,3 +51,11 @@ class Template
$.fn.view = ->
this.data('view')
$.fn.bindKey = (pattern, action) ->
@on 'keydown', (event) =>
if window.keyEventMatchesPattern(event, pattern)
if _.isString(action)
this.view()[action]()
else
action()