PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/Gradebook/Scripts/app/class.result.js

https://bitbucket.org/academium/gradebook
JavaScript | 46 lines | 37 code | 6 blank | 3 comment | 6 complexity | a45158b6818840282fb71b5161ee543f MD5 | raw file
  1. /// <reference path="../knockout-2.2.1.debug.js" />
  2. /// <reference path="../underscore-ko-1.2.2.js" />
  3. /// <reference path="../underscore.js" />
  4. function ClassResult(data) {
  5. this.studentId = data.StudentId;
  6. this.studentName = data.StudentName;
  7. var self = this;
  8. self.results = ko.observableArray();
  9. if (data.Results != null) {
  10. this.results($.map(data.Results, function (item) {
  11. var taskResult = new TaskResult(item);
  12. taskResult.result.subscribe(function () {
  13. self.results.notifySubscribers();
  14. });
  15. return new TaskResult(item);
  16. }));
  17. }
  18. self.rate = ko.computed(function () {
  19. var results = self.results();
  20. if (_.isNull(results) || _.isEmpty(results)) return 0;
  21. var tasksCount = results.length;
  22. var rateSum = _.reduce(results, function (memo, item) {
  23. var result = item.totalMarks > 1
  24. ? item.result() * 100 / item.totalMarks
  25. : item.result() * 100;
  26. return memo + result;
  27. }, 0);
  28. return tasksCount > 0 ? Math.round(rateSum / tasksCount) : 0;
  29. });
  30. self.hasResults = ko.computed(function(){
  31. var results = self.results();
  32. return !_.isNull(results) && !_.isEmpty(results);
  33. });
  34. self.getGrades = function () {
  35. if (!self.hasResults()) return [];
  36. return _.map(self.results(), function (item) {
  37. return item.toGrade();
  38. });
  39. };
  40. }