AngularJS Example:

by whtevn

HTML

<script src="http://code.angularjs.org/1.0.3/angular.js"></script>
<div ng-app="lifeCoach">
    <div id="ActivityCtl" ng-controller="ActivityCtl">                                   
      <form id="newActivityForm" ng-model="activity" ng-submit="addActivity()">          
        <div>
          <input type="text" ng-model="name" name="name" placeholder="activity name" />  
          <input type="text" ng-model="duration" name="duration" placeholder="duration" />
          <input type="text" ng-model="period" name="period" placeholder="period" />     
        </div>
        <div>                                                                            
          <input type="submit" />
        </div>                                                                           
      </form>                                                                            
      <ul id="activityList">
        <li ng-repeat="activity in activities">                                          
          {{activity.name}} - {{activity.completed*100}}%                                
          <a href="#" ng-click="activity.completeBy(0.25)">25%</a>                       
          <a href="#" ng-click="activity.completeBy(0.50)">50%</a>                       
          <a href="#" ng-click="activity.completeBy(0.75)">75%</a>                       
          <a href="#" ng-click="activity.completeBy(1)">100%</a>                         
        </li>
      </ul>
    </div>                                                                               
  </div>

JavaScript

var lifeCoach = angular.module("lifeCoach", []);                                         
                                                                                         
lifeCoach.controller("ActivityCtl", function($scope){                                    
  // should be housed in ActivityMgt                                                     
  // $scope.activities = ActivityMgt.getActivityList();                                  
  $scope.activities = [];                                                                
                                                                                         
                                                                                         
  // $scope.addActivity = ActivityMgt.newActivity(this.activity)                         
  //   ^ should house all code in addActivity, as well as the push                       
  $scope.addActivity = function(){                                                       
    var completeBy = $scope.completeBy;                                                  
    var activity = {};                                                                   
    activity.name        = this.name;                                                    
    activity.duration    = this.duration;                                                
    activity.period      = this.period;                                                  
    activity.completed   = 0;                                                            
    activity.completeBy  = function(percent){                                            
      return completeBy(this, percent)                                                   
    }                                                                                    
    $scope.activities.push(activity);                                                    
  };                                                                                     
                 ...