PageRenderTime 54ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/4. Backbone Kata/BackboneKata2/App.js

https://bitbucket.org/farmas/coding-katas
JavaScript | 70 lines | 60 code | 10 blank | 0 comment | 0 complexity | 76284ad1a6156c3a80845c85e7d62759 MD5 | raw file
  1. $(document).ready(function(){
  2. var Issue = Backbone.Model.extend({
  3. defaults: {
  4. fixed: false
  5. }
  6. });
  7. var IssueView = Backbone.View.extend({
  8. events:{
  9. 'click .completedCheckbox': 'toggleCompleted',
  10. 'click .removeLink': 'remove'
  11. },
  12. initialize: function(){
  13. this.template = _.template($('#issue-template').html());
  14. this.model.bind('change', this.render, this);
  15. },
  16. render: function(){
  17. this.$el.html(this.template(this.model.toJSON()));
  18. return this;
  19. },
  20. toggleCompleted: function(){
  21. this.model.set({fixed: !this.model.get('fixed')});
  22. },
  23. remove: function(){
  24. this.model.destroy();
  25. }
  26. });
  27. var IssueCollection = Backbone.Collection.extend({
  28. model: Issue
  29. });
  30. var IssueCollectionView = Backbone.View.extend({
  31. tagName: 'ul',
  32. initialize: function(){
  33. this.collection.bind('add destroy', this.render, this);
  34. },
  35. render: function(){
  36. this.$el.empty();
  37. var that = this;
  38. this.collection.each(function(e){
  39. var issueView = new IssueView({ model: e });
  40. that.$el.append($('<li>').html(issueView.render().el));
  41. });
  42. return this;
  43. }
  44. });
  45. var addIssue = function(evt){
  46. var issue = new Issue({
  47. title: $('#newIssueText').val(),
  48. priority: $('#newIssuePriority').val()
  49. });
  50. issues.add(issue);
  51. $('#newIssueText').val('');
  52. evt.preventDefault();
  53. }
  54. var issues = new IssueCollection();
  55. var listView = new IssueCollectionView({collection: issues});
  56. $('.issueList').html(listView.render().el);
  57. $('#newIssueSubmit').click(addIssue);
  58. $('#newIssueForm').submit(addIssue);
  59. $('#newIssueText').focus();
  60. });