AssessmentChanger
by david_i_smith
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.radio/1.0.5/backbone.radio.min.js"></script>
JavaScript
/**
* Config =====================================================================================
*/
var constants = {
PSAT_NMSQT_ADMIN_CUTOFF_DATE: '2016-01-01',
REPORT_CONFIG: {
psatnmsqt: {
current: {
attrs: {
p_asmt_id: '100_4',
p_scr_tier: 'TOT'
}
},
historical: {
attrs: {
p_asmt_id: '76_-2',
p_scr_tier: 'CR'
}
}
},
sat: {
attrs: {
p_asmt_id: null
}
}
},
PSAT_NMSQT_SCORE_REPORT_COHORT_CUTOFF_DATES_BY_GRADE: {
'1': '2021', // 7th grade
'2': '2020', // 8th grade
'4': '2019', // 9th grade
'5': '2018', // 10th grade
'6': '2017', // 11th grade
'7': '2016' // 12th grade
}
};
/**
* Classes =====================================================================================
*/
/**
* AssessmentChanger
*/
var AssessmentChanger = function(options) {
this.eventType = options.eventType;
this.eventObj = options.eventObj;
this.reportConfig = options.reportConfig;
};
AssessmentChanger.prototype.handleAttributeChange = function() {
var getCallbackName = _.bind(function() {
return 'handle' + this.charAt(0).toUpperCase() + this.slice(1) + 'Change';
}, this.eventType);
var reportConfig = this[getCallbackName()](this.eventObj);
if (_.isObject(reportConfig)) {
this.updateReport.call(this.eventObj.report, reportConfig);
} else {
throw new Error('no configuration data for ' + getCallbackName());
}
};
AssessmentChanger.prototype.updateReport = function(reportConfig) {
this.attributes.p_asmt_id = reportConfig.attrs.p_asmt_id;
};
AssessmentChanger.prototype.handleAdminDateChange = function() {
throw new Error('must be implemented by subclass');
};
AssessmentChanger.prototype.handleCohortYearChange = function() {
throw new Error('must be implemented by subclass');
};
AssessmentChanger.prototype.handleGradeLevelChange = function() {
throw new Error('must be implemented...