sunshuzhou
5/29/2016 - 4:02 PM

Coffeescript jQuery Plugin Class Template

Coffeescript jQuery Plugin Class Template

# A class-based template for jQuery plugins in Coffeescript
#
#     $('.target').myPlugin({ paramA: 'not-foo' });
#     $('.target').myPlugin('myMethod', 'Hello, world');
#
# Check out Alan Hogan's original jQuery plugin template:
# https://github.com/alanhogan/Coffeescript-jQuery-Plugin-Template
#
(($, window) ->

  # Define the plugin class
  class MyPlugin

    defaults:
      paramA: 'foo'
      paramB: 'bar'

    constructor: (el, options) ->
      @options = $.extend({}, @defaults, options)
      @$el = $(el)

    # Additional plugin methods go here
    myMethod: (echo) ->
      @$el.html(@options.paramA + ': ' + echo)

  # Define the plugin
  $.fn.extend myPlugin: (option, args...) ->
    @each ->
      $this = $(this)
      data = $this.data('myPlugin')

      if !data
        $this.data 'myPlugin', (data = new MyPlugin(this, option))
      if typeof option == 'string'
        data[option].apply(data, args)

) window.jQuery, window