(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));