AngularJS controller with comfortable proxy methods

Use jQuery proxies to avoid anonymous functions and use inatance methods instead. Provided by comfortable methods of BaseController: proxyMethod, proxyMethodsInScope

by bjoerne

HTML

<script src="http://code.jquery.com/jquery-2.0.3.js"></script>
<div ng-controller="ExampleController">
    <div>Hello, {{name}}!</div>
    <div>Counter:  {{counter}}
        <button ng-click="increase()">+</button>
        <button ng-click="decrease()">-</button>
        <button ng-click="reset()">reset</button>
    </div>
</div>

CoffeeScript

class @BaseController
  
  constructor: (injectionNames, injectedObjects) ->
    @inject injectionNames, injectedObjects

  inject: (injectionNames, injectedObjects) ->
    i = 0
    for injectionName in injectionNames
      @[injectionName] = injectedObjects[i]
      i++
    
  proxyMethod: (method) ->
    $.proxy method, @

  proxyMethodsInScope: ->
    for methodName in arguments
      @$scope[methodName] = $.proxy @[methodName], @

class @ExampleController extends BaseController

    @$inject: ['$scope', '$timeout']

    constructor: ->
        super ExampleController.$inject, arguments
        @$scope.name = 'Superhero'
        @$scope.counter = 0
        # bad
        @$scope.increase = ->
            @counter++
        # good
        @proxyMethodsInScope 'decrease', 'reset'
        
    decrease: ->
        @$scope.counter--

    reset: ->
        @$timeout @proxyMethod(@doReset), 0

    doReset: ->
        @$scope.counter = 0
        
myApp = angular.module 'myApp',[]
angular.bootstrap document, ['myApp']