Skip to content

Instantly share code, notes, and snippets.

@lzyzsd
Forked from newbamboo/mvc_example.js
Created August 28, 2012 03:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lzyzsd/3494555 to your computer and use it in GitHub Desktop.
Save lzyzsd/3494555 to your computer and use it in GitHub Desktop.
/* MODELS */
var ProjectCollection = function(projects){
var self = this;
var projects = projects;
this.create = function(attrs){
projects.push(attrs)
// might want to a bit of ajax here
$().trigger('Project-create', [attrs]);
}
this.all = function(){
return projects;
}
}
/* VIEWS */
var ProjectList = function(elem, projects) {
var elem = elem;
var projects = projects;
var draw = function(){
elem.html('')
for (i in projects.all()){
add_project(projects.all()[i])
}
};
var add_project = function(project){
elem.append('<p>'+ project['name'] + '</p>')
}
var add_project_from_event = function(evt, project){
add_project(project);
}
$().bind('Project-create', add_project_from_event)
draw();
}
var ProjectForm = function(elem, project){
var elem = elem
}
/* ROUTES */
var app = $.sammy(function() {
with(this){
get('#/', function() { with(this) {
$('#project_form').hide();
$('#project_name').val('')
$('#new_link').show();
}});
get('#/projects/new', function() { with(this) {
$('#project_form').show();
$('#new_link').hide();
}});
post('#/projects', function() { with(this) {
Projects.create( { name: params['name'] } );
redirect('#/');
}});
}
});
$(function() {
app.run('#/');
});
// INITIALIZE APP
// existing projects
var existing_projects = [{name: 'foo'}, {name: 'bar'}]
$(document).ready(function(){
Projects = new ProjectCollection(existing_projects);
var project_list = new ProjectList($('#project_list'), Projects );
var project_form = new ProjectForm($('#project_form'));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment