LoginController

by david_i_smith

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/async/2.0.1/async.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/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.1/backbone.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.4.5/backbone.marionette.min.js"></script>
<div id="viewer-region"></div>

JavaScript

var LoginController = Marionette.Object.extend({
  initialize: function () {
    _.bindAll(this, 'onReportsLoad', 'onReportsFail', 'onReportsComplete', 'onLoginReportLoad', 'onLoginReportFail', 'onLoginReportComplete');
  },
  bootstrap: function () {
    this.getReports({
      onSuccess: this.onReportsLoad,
      onError: this.onReportsFail,
      onComplete: this.onReportsComplete
    });
  },
  getReports: function (callbacks) {
    return this.getResource(this.loadReports, null, callbacks);
  },
  getLoginReport: function (reportsData, callbacks) {
    return this.getResource(this.loadLoginReport, reportsData, callbacks);
  },
  getResource: function (func, arg, callbacks) {
    $.when(func(arg))
      .done(function () {
      callbacks.onSuccess.apply(this, arguments);
    })
      .fail(function () {
      callbacks.onError.apply(this, arguments);
    })
      .always(function () {
      callbacks.onComplete.apply(this);
    });

  },
  onReportsLoaded: function (reportsData) {
    this.getLoginReport(reportsData, {
      onSuccess: this.onLoginReportLoad,
      onError: this.onLoginReportFail,
      onComplete: this.onLoginReportComplete
    });
  },
  onLoginReportLoaded: function (loginData) {
    this.next();
  },
  loadReports: function () {
    var dfd = $.Deferred();
    dfd.resolve([{name: 'scores-by-org'}]);
    return dfd.promise();
  },
  loadLoginReport: function () {
    var dfd = $.Deferred();
    dfd.resolve(true);
    return dfd.promise();
  },
  onReportsLoad: function () {
    alert('reports load');
    this.onReportsLoaded.apply(this, arguments);
  },
  onReportsFail: function () {
    alert('reports fail');
  },
  onReportsComplete: function () {
    alert('reports complete');
  },
  onLoginReportLoad: function () {
    alert('login report load');
    this.onLoginReportLoaded.apply(this, arguments);
  },
  onLoginReportFail: function () {
    alert('login report fail');
  },
  onLoginReportComplete: function () {
    alert('login...