Skip to content

Instantly share code, notes, and snippets.

@honza
Created May 26, 2011 16:08
Show Gist options
  • Save honza/993433 to your computer and use it in GitHub Desktop.
Save honza/993433 to your computer and use it in GitHub Desktop.
Widget class example
$ ->
# Widget class example
class Widget
constructor: (@model, @events) ->
_keepThis: (func, obj) ->
args = Array.prototype.slice.call arguments, 2
-> func.apply obj, args.concat arguments
bind: ->
splitter = /^(\w+)\s*(.*)$/
if @events
for ev of @events
method = @events[ev]
parts = ev.match splitter
evName = parts[1]
selector = parts[2]
method = @_keepThis method, @
@el.delegate selector, evName, method
html: ->
$( """
<div>
<h2>#{@model.title}</h2>
<p>#{@model.content}</p>
</div>
""")
render: ->
@el = @html()
@bind()
@el
model =
title: 'Widget title'
content: 'This is some cool content'
w = new Widget model,
'click h2': ->
console.log 'clicked'
console.log this
$('#app').append w.render()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment