. ├── init-env.sh // Script de inicialización del proyecto ├── pom.xml // Maven stuff ├── package.json // Dependencias de desarrollo (npm) ├── bower.json // Dependencias con librerías externas ├── README.md // Este documento ├── target // Workspace de temporales de Grunt ├── src/test // Workspace de test └── src/main/webapp // Workspace de desarollo de Grunt ├── stylesheets // Hojas de estilo SASS └── scripts ├── app.js // Contexto de aplicación
├── main.js // Script que arranca la aplicación └── engine // Componentes internos de la aplicación ├── services.js // Comunicación con Backend ├── common.js // Parámetros de la app ├── factory.js // Factoría de objetos ├── locale.js // Módulo de i18n ├── logger.js // Módulo de log ├── polyfills.js// Polyfill varios ├── utils.js // Funciones varias ├── user.js // Autenticación y gestión de usuario ├── resource.js // Librería para realizar peticiones a backend
├── session.js // Gestión d elos datos de sesión del usuario ├── router.js // Enrutador de la webapp ├── ... └── start.js // Inicializador de módulo
'use strict';
/* global define */
define([
'app',
], function(app) {
// Code here!
});
app.addInitializer(function() {
// Initialization code here
});
app.addRegions({
header: 'header',
main: 'main',
footer: 'footer'
});
app.header.show(app.factory.new('HeaderView'));
var HeaderView = Backbone.Marionette.ItemView.extend({...});
app.factory.add('HeaderView', HeaderView);
app.header.show(app.factory.new('HeaderView'));
src/main/webapp ├── res │ └──config │ ├──config.json // Configuración de la webapp │ └──myModule.json // Configuración del módulo 'myModule' └── scripts ├──define.js // definición de dependencias requirejs ├──main.js // Script principal de la webapp └──modules // Directorios de módulos de la webapp ├──loader.js // Declaración de módulos a cargar └──myModule // Nombre del módulo ├── start.js // Inicialización y dependencias
├── css // Hojas de estilo ├── collections // Colecciones del módulo ├── layouts // Layouts del módulo ├── models // Modelos del módulo ├── templates // Templates "Handlebars" └── views // Vistas (ItemView/CollectionView)
var MyModel = Backbone.Model.extend({});
myModel = new MyModel({
foo: 'Hi',
bar: 'Álvaro'
});
<div>
<h1>{{foo}}</h2>
<p>{{bar}}</p>
</div>
'use strict'; /* global define */ define(['app', 'jquery', 'underscore', 'backbone', 'backbone.marionette'], function(app, $, _, Backbone) {
var MyView = Backbone.Marionette.ItemView.extend({
template: function(serializedModel) { // Load the compiled template generated by // 'modules/myModule/templates/myTemplate.html' return app.jst['myModule/myTemplate'](serializedModel); } }); return MyView; });
'use strict'; /* global define */ define(['app', 'jquery', 'underscore', 'backbone', 'backbone.marionette'], function(app, $, _, Backbone) { var MyCollectionView = Backbone.Marionette.CollectionView.extend({ // Reference to the ItemView specification itemView: function() {
return app.views.get('MyView')
} }); return MyCollectionView; });
app.regionName.show(app.views.create('MyView'));
var myView = app.views.create('MyView');
$('body').html(myView.render().el);
var myHandler = function() { var myModel = app.models.create('MyModel'); app.myRegion.show(app.views.create('MyView', { model: myModel })); }; app.addInitializer(function() {
// Define router paths
app.router.route('myroute', 'trigger:this:event', myHandler); });
var myHandler = function() { var myModel = app.models.create('MyModel'); app.myRegion.show(app.views.create('MyView', { model: myModel })); };
app.addInitializer(function() { // Add models to factory app.models.add('MyModel', MyModel); // Add views to factory app.views.add('MyView', MyView); // Define router paths app.router.route('myroute', 'trigger:this:event', myHandler); });
app.on('initialize:after', function() { // Code after initialization here app.myRegion.show(app.views.create('MyCollectionView')); });
'use strict';
/* globals require, console */
require([
'app',
'jquery',
'underscore',
'backbone',
// Modules
'modules/engine/start',
'modules/myModule/start' // <== Module declaration
], function(app, $, _, Backbone) { ... });
app.vent.on("foo", function(args){
console.log("foo event" + args.bar);
});
app.vent.trigger("foo", {bar: true});
app.reqres.setHandler("foo", function(){
return "foo requested. this is the response";
});
var result = app.reqres.request("foo");
console.log(result);
app.commands.setHandler("foo", function(bar){
console.log(bar);
});
app.execute("foo", "baz");
app.api.auth(params);
var resource = app.api.setResource('books/id/author');
resource.page(3, 15);
resource.gt('price', 50);
resource.eq('year', 2013);
resource.sort('name', 'asc');
// ... more operators: lt, lte, gte, neq, ...
resource.keywords(['Harry', 'Potter', 'Fénix']);
var promise = resource.execute()
promise.then(function(){ })
.done(function(){ })
.fail(function(){ });
"Escribe los tests como si quisieras contar una historia"
grunt server
grunt test
grunt
jshint => [test] => jst => compass => concat => imgmin => htmlmin => cssmin => jsmin => rev