On Github cowboyd / emberatx-2013-02-28
Created by Charles Lowell / @cowboyd
Are all letters created equal?
No! Get your model right, and everything else comes easily.
(Ember is guilty of this)
MVC is Kung Fu. There are many different styles
Ember's is strong
(computed or otherwise)
Circle = Ember.Object.extend
  area: (->
    r = get 'r'
    Math.PI * r * r
  ).property 'r'
c = Circle.create(r: 1)
c.get 'area' # => 3.141592653589793
c.set 'r', 2
c.get 'area' # => 12.566370614359172
                
c = Circle.create(r: 1)
c.addObserver 'area', -> console.log "area changed to #{c.get 'area'}"
c.set 'r', 2
                    area changed to 12.566370614359172
Drag = Ember.Object.extend
  path: []
  start: (->
    @get('path.firstObject') || Point.create()
  ).property 'path.firstObject'
  end: (->
    @get('path.lastObject') || Point.create()
  ).property 'path.lastObject'
  delta: (->
    x: @get('end.x') - @get('start.x')
    y: @get('end.y') - @get('start.y')
  ).property 'start', 'end'
Drag.Interaction = Ember.Object.extend
  init: ->
    #...
    $(document.body).on 'mousemove', (e)=>
      @get('drag.path').pushObject Point.create x: e.pageX, y: e.pageY
                Drag = Ember.Object.extend
  #...
  offset:
    left: @get('offset0.left') + @get('delta.x')
    top: @get('offset0.top') + @get('delta.y')
  ).property 'delta.x', 'delta.y', 'offset0.left', 'offset0.top'
Drag.Interaction = Ember.Object.extend
  #...
  updateOffsets: (->
    $(@get 'element').css
      left: @get 'drag.offset.left'
      top: @get 'drag.offset.top'
  ).observes 'drag.offset.left', 'drag.offset.top'
                Models based on computed properties outnumber all other classes by at least 10:1
Only use observers where the surface of your model makes contact with the DOM