62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
(function(define) {
|
|
define([
|
|
'underscore',
|
|
'backbone',
|
|
'js/discovery/models/course_card',
|
|
'js/discovery/models/facet_option'
|
|
], function(_, Backbone, CourseCard, FacetOption) {
|
|
'use strict';
|
|
|
|
return Backbone.Model.extend({
|
|
url: '/search/course_discovery/',
|
|
jqhxr: null,
|
|
|
|
defaults: {
|
|
totalCount: 0,
|
|
latestCount: 0
|
|
},
|
|
|
|
initialize: function() {
|
|
this.courseCards = new Backbone.Collection([], {model: CourseCard});
|
|
this.facetOptions = new Backbone.Collection([], {model: FacetOption});
|
|
},
|
|
|
|
parse: function(response) {
|
|
var courses = response.results || [];
|
|
var facets = response.facets || {};
|
|
this.courseCards.add(_.pluck(courses, 'data'));
|
|
|
|
this.set({
|
|
totalCount: response.total,
|
|
latestCount: courses.length
|
|
});
|
|
|
|
var options = this.facetOptions;
|
|
_(facets).each(function(obj, key) {
|
|
_(obj.terms).each(function(count, term) {
|
|
options.add({
|
|
facet: key,
|
|
term: term,
|
|
count: count
|
|
}, {merge: true});
|
|
});
|
|
});
|
|
},
|
|
|
|
reset: function() {
|
|
this.set({
|
|
totalCount: 0,
|
|
latestCount: 0
|
|
});
|
|
this.courseCards.reset();
|
|
this.facetOptions.reset();
|
|
},
|
|
|
|
latest: function() {
|
|
return this.courseCards.last(this.get('latestCount'));
|
|
}
|
|
|
|
});
|
|
});
|
|
}(define || RequireJS.define));
|