Présenté par Nicolas CARLO (@nicoespeon) et Fabien BERNARD (@fabien0102)
VP of Engineering
CTO
Jeu social sur le thème du vin dans lequel on peutacheter en vrai les bouteilles que l'on produit virtuellement
// Probablement à l'arrache, dans un `main.js` FTW
// Note - pas besoin de routage pour nous donc on fait sans =)
$(function() {
// (…)
// On prépare nos bouteilles
var bottlesModel = Backbone.Model.extend({ ... });
var bottlesCollection = Backbone.Collection.extend({ ... });
var bottlesView = Backbone.View.extend({ ... });
var bottlesCollectionView = Backbone.View.extend({ ... });
// (…)
// Et on initialise tout le monde !
var myBottlesList = new bottlesCollection();
myBottlesList.fetch();
var myBottlesListView = new bottlesCollectionView({
collection: myBottlesList
});
myBottlesListView.$el.appendTo("#bottom-bar");
myBottlesListView.render();
// (…)
})();
$(function() {
// (…)
// On prépare nos bouteilles
var bottlesModel = Backbone.Model.extend({ ... });
var bottlesCollection = Backbone.Collection.extend({ ... });
var bottlesView = Backbone.View.extend({ ... });
var bottlesCollectionView = Backbone.View.extend({ ... });
// On prépare nos bâtiments
var buildingsModel = Backbone.Model.extend({ ... });
var buildingsCollection = Backbone.Collection.extend({ ... });
var buildingsView = Backbone.View.extend({ ... });
var buildingsCollectionView = Backbone.View.extend({ ... });
// On prépare nos cépages
var cepagesModel = Backbone.Model.extend({ ... });
var cepagesCollection = Backbone.Collection.extend({ ... });
var cepagesView = Backbone.View.extend({ ... });
var cepagesCollectionView = Backbone.View.extend({ ... });
// (…)
// Idem avec nos ressources, nos timers, nos dialogs, nos rewards, etc.
// 3.234 lignes plus tard
// (…)
// Et on initialise tout le monde !
var myBottlesList = new bottlesCollection();
var myBuildingsList = new buildingsCollection();
var myCepagesList = new cepagesCollection();
myBottlesList.fetch();
myBuildingsList.fetch();
myCepagesList.fetch();
var myBottlesListView = new bottlesCollectionView({
collection: myBottlesList
});
myBottlesListView.$el.appendTo("#bottom-bar");
myBottlesListView.render();
var myBuildingsListView = new buildingsCollectionView({
collection: myBuildingsList
});
myBuildingsListView.$el.appendTo("#main");
myBuildingsListView.render();
var myCepagesListView = new cepagesCollectionView({
collection: myCepagesList
});
myCepagesListView.$el.appendTo("#aside");
myCepagesListView.render();
// (…)
})();
Pis faudra pas oublier :
Source - http://scaleapp.org/ (inspired by N. Zakas)
// bottles.model.js
// Une seule dépendance -> Application Core
define( [ "app" ], function( app ) {
return Backbone.Model.extend({ ... });
});
// bottles.views.item.js
// Une seule dépendance -> Application Core
define( [ "app" ], function( app ) {
return Backbone.Marionette.ItemView.extend({ ... });
});
// bottles.js
define( [
"app",
// Le modèle
"bottles/models/bottles",
// Les vues
"bottles/views/bottles.views.item"
], function( app, Model, ItemView ) {
// Initialise le module avec les méthodes de base.
var Bottles = app.module();
// On spécifie nos API
Bottles.Model = Model.extend( { ... });
Bottles.Views.Item = ItemView.extend( { ... });
// On renvoie le tout
return Bottles;
});
// main.js
define( [
"app",
// Les modules
"bottles/bottles.js"
], function( app, Bottles ) {
// Initialise le module avec les méthodes de base.
var myBottlesList = new Bottles.Collection();
myBottlesList.fetch();
var myBottlesListView = new Bottles.Views.Collection( {
collection: myBottlesList
} );
myBottlesListView.appendTo( "#bottom-bar" );
});
<div class="builds__menu">
<ul class="builds__menu__tabs">
<li data-ui="tab">Bâtiments</li>
<li data-ui="tab">Décorations</li>
</ul>
</div>
<!-- (…) -->
return Backbone.Marionette.ItemView.extend({
ui: {
"tab": "[data-ui~=tab]"
},
events: {
"click @ui.tab": "switchTab"
}
// (…)
highlightTabs: function() {
this.ui.tab.each(function() {
// Do something awesome!
});
}
// (…)
});
return Backbone.Collection.extend({
events: {
"click": "displayName"
}
appEvents: {
"bottles:do:setName": "setName"
}
// (…)
initialize: function() {
Marionette.bindEntityEvents( this, app, Marionette.getOption( this, "appEvents" ) );
}
setName: function( appellation, name ) {
// Name this bottle
}
// (…)
});
return Backbone.Collection.extend({
requests: {
getCategories: function() {
// Retrieve categories…
return categories;
}
},
// (…)
initialize: function() {
app.reqres.setHandler( "builds:getCategories", this.requests.getCategories, this );
}
// (…)
});
// Pendant ce temps, ailleurs dans le code var buildsCategories = app.request( "builds:getCategories" ); // (…)
Des suggestions ?