Organizing your App Cloud code

app cloud dev
 
Adam Mark's picture
Adam Mark on February 7, 2012

App Cloud templates can be organized in any form or fashion, with one exception: the manifest file must be at the root of the template directory. Otherwise, you can use any conventions you like.

In my templates, I like to have one JavaScript file per HTML file. For example:

template/
    html/
        news.html
        sports.html
        weather.html
    js/
        NewsView.js
        SportsView.js
        WeatherView.js
    manifest.json

My JavaScript "classes" share a lot of functionality, so I throw a base class into the mix. I also like to put third-party code in its own directory:

template/
    html/
        news.html
        sports.html
        weather.html
    js/
        lib/
            brightcove-app-cloud-1.7.3.js
            some-other-library.js
        View.js
        NewsView.js
        SportsView.js
        WeatherView.js
    manifest.json

The base View class performs common functions like loading and caching data:

function View() {
    // load a content feed from App Cloud and cache it by name
    this.loadFeed = function (name, callback, options) {
        ...
    };

    // load JSON from a URL and cache it by name
    this.loadJSON = function (name, url, callback) {
        ...
    };

    // get a cached feed by name
    this.getCachedFeed = function (name) {
        return bc.core.cache(name) || null;
    };

    // etc
}

I also hang some other static functions off the base class:

View.Banner = function (elemId, title) {
    ...
};

My individual view classes, like NewsView, derive from View:

function NewsView() {
    this.init = function () {
        ...
    };

    // etc
}

NewsView.prototype = new View();

There are other ways to model inheritance in JavaScript, but I play it straight.

As for actually doing stuff, I wait until the user enters the view for the first time before running any code:

<!-- news.html -->
<script>
var view;

$(bc).bind("viewfocus", function (evt) {
    if (!view) {
        view = new NewsView();
        view.init();
    }
});
</script>

You can see working code samples in the reference app.

p.s. Get more tips and tricks (and share your own) by joining the Brightcove App Cloud discussion group on Google.

Post new comment

The content of this field is kept private and will not be shown publicly.
0

Comments