Contact Manager Application

Look at the steps taken to build our application using Marionette.js.

We'll cover the following

Let’s take a look at the steps we followed, along with the concepts discussed briefly while building our contact management application.


We covered the following steps while developing our application:

  • Basic structure: We organized our assets and created a basic structure for our project.

  • Views vs. templates: We understood the difference between views and templates and learned about various view attributes.

  • Default views: We learned to display a model with default values and used events to generate alerts that included the model’s data.

  • Contacts list: Using CollectionView, we listed our collection and applied sorting by using the comparator option.

  • Column headers: We added tables with column headers for displaying our contacts collection on the application’s main page by using CompositeView.

  • The “Delete” and “Show” buttons: We added the functionality to the “Delete” and “Show” buttons using events, bubbling, and triggers while animating them in the display.

  • Routing: We added routing to our application for quicker navigation using Marionette and implemented a view for nonexistent contacts.

  • Web storage: We added persistence for our application to retain the data modified by the user.

  • Adding new contacts: We added the functionality of creating new contacts in our application by sub-dividing our complex views and extending from base views while discussing the difference between direct inheritance (duplicated behavior) and using base views (shared behavior).

  • Filtering contacts: We added the functionality to filter contacts by both input-based search and by navigating via routing directly to the desired contacts using optional routes and query strings.

  • Sub-application: We created a sub-application and its sub-modules, including views and controllers.

  • Enabling navigation: We added navigation with the brand and highlighting menu clicks.

Complete project

Here is our complete project with all the files we created along the way!

ContactManager.module("Common.Views", function(Views, ContactManager,
Backbone, Marionette, $, _){
  Views.Loading = Marionette.ItemView.extend({
    template: "#loading-view",

    title: "Loading Data",
    message: "Please wait, data is loading.",

    serializeData: function(){
      return {
        title: Marionette.getOption(this, "title"),
        message: Marionette.getOption(this, "message")
    onShow: function(){
      var opts = {
        lines: 13, // The number of lines to draw
        length: 20, // The length of each line
        width: 10, // The line thickness
        radius: 30, // The radius of the inner circle
        corners: 1, // Corner roundness (0..1)
        rotate: 0, // The rotation offset
        direction: 1, // 1: clockwise, -1: counterclockwise
        color: "#000", // #rgb or #rrggbb
        speed: 1, // Rounds per second
        trail: 60, // Afterglow percentage
        shadow: false, // Whether to render a shadow
        hwaccel: false, // Whether to use hardware acceleration
        className: "spinner", // The CSS class to assign to the spinner
        zIndex: 2e9, // The z-index (defaults to 2000000000)
        top: "30px", // Top position relative to parent in px
        left: "auto" // Left position relative to parent in px
The complete Contact Manager application