Recursive mapping c/ flat properties

by Riderman Sousa

HTML

<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.2.0.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.js"></script>

CoffeeScript

class @CheckListItem
    constructor: (data) ->
        @Id = data.Id
        @Texto = data.Texto
        @Dias = data.Dias
        @Itens = data.Itens

mapping = 
    key: (data) -> ko.utils.unwrapObservable(data.Id)
    create: (opts) -> 
        opts.data.Texto = opts.data.Template.Texto
        opts.data.Dias = opts.data.Template.Dias
        if opts.data.Itens
            opts.data.Itens = ko.utils.arrayMap(opts.data.Itens, (it) -> ko.mapping.fromJS it, mapping)
        new CheckListItem(opts.data)

serverData = '[{"Id":1,"Template":{"Texto":"Tarefa 1","Dias":1},"Itens":[{"Id":2,"Template":{"Texto":"Tarefa 2","Dias":3},"Itens":[]}]},{"Id":3,"Itens":[],"Template":{"Texto":"Tarefa 3","Dias":5}}]'

debugger
checkList = ko.mapping.fromJSON serverData, mapping

console.dir ko.mapping.toJS checkList