CanJS jQuery Template

Includes jQuery, CanJS and all of its plugins. Use it as a starting point when you want to demo something.

HTML

<script src="http://canjs.us/release/latest/can.jquery.js"></script>
<script src="http://canjs.us/release/latest/can.construct.proxy.js"></script>
<script src="http://canjs.us/release/latest/can.control.plugin.js"></script>
<script src="http://canjs.us/release/latest/can.view.modifiers.js"></script>
<script src="http://canjs.us/release/latest/can.construct.super.js"></script>
<script src="http://canjs.us/release/latest/can.object.js"></script>
<script src="http://canjs.us/release/latest/can.ejs.js"></script>
<script src="http://canjs.us/release/latest/can.map.attributes.js"></script>
<script src="http://canjs.us/release/latest/can.map.backup.js"></script>
<script src="http://canjs.us/release/latest/can.map.delegate.js"></script>
<script src="http://canjs.us/release/latest/can.map.setter.js"></script>
<script src="http://canjs.us/release/latest/can.map.validations.js"></script>
<script src="http://canjs.com/release/latest/can.fixture.js"></script>
<script src="http://marak.com/faker.js/js/faker.js"></script>

JavaScript

var makeIssue = (function() {
    var id = 1;
    return function () {
        return {
            id: id++,
            title: faker.lorem.sentence(),
            description: faker.lorem.paragraph()
        }}})()

function makeList(constructor) {
    var list = [];
    for (var i=0; i<10; i++) list.push(constructor());
    return list;
}

can.fixture({
    'GET Issues': function() {
        return makeList(makeIssue);
    },
    'GET Issue/{id}': function() {
        return makeIssue()
    },
    'GET Issue/{id}/Related': function() {
        return makeList(makeIssue);
    },
});

var Issue = can.Model.extend({
    findAll: 'GET Issues',
    findOne: 'GET Issues/{id}',
   
      findRelated: function(params) {
        var deferred = new can.Deferred();
    
        can.ajax({
          type: 'GET',
          url: 'Issue/'+params.id+'/Related'
        }).then(function(response) {
          // success
          deferred.resolve(Issue.models(response || []));
        }, function(xhr, textStatus, err) {
          // failure
          deferred.reject(err);
        });

        return deferred;
      }
    
},{});

Issue.findRelated({id: 3}).then(function(issues) {
    console.log(issues);
});