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 ?