Last Updated: February 25, 2016
· jaysoo

CoffeeScript mixins in Backbone

This will allow you to use mixins in your Backbone models, views, collections, and routers.

include = (mixins...) ->
    throw new Error('include(mixins...) requires at least one mixin') unless mixins and mixins.length > 0

    for mixin in mixins
      for key, value of mixin
        @::[key] = value unless key is 'included'


Backbone.Model.include = Backbone.Collection.include = include
Backbone.View.include = Backbone.Router.include = include

Then you can do:

Foo =
  # Executes when included
  included: ->
    @message = 'Hello World!'

  # This method will be mixed in
  bar: -> console.log @message

class MyView extends Backbone.View
  @include Foo

view = new MyView  # prints 'Hello World!

1 Response
Add your response

Thanks for this. The only issue I ran into was trying to use super in the instance methods since Coffeescript will error due to detecting super being called outside of an instance method when it parses the mixin code.

I got around this by manually finding/calling the super method:

@Foo =
  bar: () ->
    # Do something...
    # Falling back to super if found
    if superMethod = @constructor.__super__[]
      superMethod.apply @, arguments

If you know of a better way, please let me know!


over 1 year ago ·