Ember Demo - Polymorphic BelongsTo (Serialized)

by pjmorse

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0/handlebars.min.js"></script>
<script src="http://builds.emberjs.com/canary/ember.js"></script>
<script src="http://builds.emberjs.com/canary/ember-data.js"></script>
<script type="text/x-handlebars">
    <div class="container">
        <h1>EmberJS Polymorphic belongsTo</h1>
        
        {{#link-to "inventoryLedgers" class="btn btn-primary"}}
            Inventory Ledgers
        {{/link-to}}
    </div>
    {{outlet}}
</script>

<script type='text/x-handlebars' data-template-name="inventoryLedgers">
    <div class='container'>
        <h1>Inventory Ledgers</h1>
        <div class="form-group">
            {{#each}}
                {{name}} - {{ledger.name}}<br />
            {{/each}}
        </div>
    </div>
</script>

CSS

.well {margin-top:10px;}

CoffeeScript

# Initiate Ember App
App = window.App = Em.Application.create()

# Set the application adapter to AMS
App.ApplicationAdapter = DS.ActiveModelAdapter.extend()

# Router
App.Router.map ->
    @resource 'inventoryLedgers'
     
# Models
App.InventoryLedger = DS.Model.extend
    name: DS.attr 'string'
    ledger: DS.belongsTo 'ledger', polymorphic: true
    
App.Movement = DS.Model.extend
    name: DS.attr 'string'
 
App.Adjustment = DS.Model.extend
    name: DS.attr 'string'

App.Ledger = DS.Model.extend
    name: DS.attr "string"
    
# Routes
App.InventoryLedgersRoute = Em.Route.extend
    model: ->
        @store.find('inventoryLedger')
        
# Controllers
App.InventoryLedgersController = Em.ArrayController.extend()
            
# Serializers
App.InventoryLedgerSerializer = DS.ActiveModelSerializer.extend
    normalize: (type, payload) ->
        payload.ledger = payload.ledgerable_id
        delete payload.ledgerable_id
        payload.ledgerType = payload.ledgerable_type
        delete payload.ledgerable_type
        
        @_super(type, payload)

$.mockjax
  url: '/inventory_ledgers'
  response: (request) ->
    @responseText = 
        inventory_ledgers: [ 
            id: 1
            name: 'Ledger 1'
            ledgerable_id: 1
            ledgerable_type: "movement"
           ,
            id: 2
            name: "Ledger 2"
            ledgerable_id: 1
            ledgerable_type: "adjustment"
        ]

$.mockjax
  url: '/adjustments/1'
  response: (request) ->
    @responseText = 
        adjustments: [ 
            id: 1
            name: 'Adjustment Ledger 1'
        ] 

$.mockjax
  url: '/movements/1'
  response: (request) ->
    @responseText = 
        movements: [ 
            id: 1
            name: 'Movement Ledger 1'
        ]