1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
define([
// Libraries.
"jquery",
"lodash",
"backbone",
"helpers",
// Plugins.
"plugins/backbone.layoutmanager"
],
function($, _, Backbone, Helpers) {
// Make sure we have a console.log
if (typeof console == "undefined") {
console = {
log: function(){}
};
}
// Provide a global location to place configuration settings and module
// creation.
var app = {
// The root path to run the application.
root: "/"
};
// Localize or create a new JavaScript Template object.
var JST = window.JST = window.JST || {};
// Configure LayoutManager with Backbone Boilerplate defaults.
Backbone.LayoutManager.configure({
// Allow LayoutManager to augment Backbone.View.prototype.
manage: true,
prefix: "app/",
// Inject app/helper.js for shared functionality across all html templates
render: function(template, context) {
return template(_.extend(Helpers, context));
},
fetch: function(path) {
// Initialize done for use in async-mode
var done;
// Concatenate the file extension.
path = path + ".html";
// If cached, use the compiled template.
if (JST[path]) {
return JST[path];
} else {
// Put fetch into `async-mode`.
done = this.async();
// Seek out the template asynchronously.
return $.ajax({ url: app.root + path }).then(function(contents) {
done(JST[path] = _.template(contents));
});
}
}
});
// Mix Backbone.Events, and modules into the app object.
return _.extend(app, {
// Create a custom object with a nested Views object.
module: function(additionalProps) {
return _.extend({ Views: {} }, additionalProps);
}
}, Backbone.Events);
});
|