On Github jacomyal / parisjs-201306-domino
Paris.js / Juin 2013
développeur JavaScript, Sciences-Po médialab
D'abord, une courte introduction...
...et on n'a parfois ni le temps ni les moyens de redévelopper ou refactoriser le code
Centraliser tout le moteur de l'interface au même endroit
Déterminer quelles sont les parties critiques du code, qui doivent rester propres et solides
Prévoir comment débugger efficacement
Le contrôleur (l'instance de domino) est dans un seul fichier et décrit tout le coeur de l'application
La majorité des données et des appels Ajax sont simplement décrites de manière déclarative, dans de simples objets
Les hacks gèrent tous les comportements délicats à implémenter élégamment ou non prévus dans le design initial
Les modules relient les éléments d'interface (HTML, Web Components) au contrôleur
Ils sont spécifiques à l'application, et peuvent donc être développés vite
Ils communiquent avec le contrôleur de manière exclusivement événementielle
var config = { name: 'myController', properties: [{ id: 'myFlag', type: 'boolean', value: false, triggers: 'updateMyFlag', dispatch: 'myFlagUpdated' }], hacks: [{ triggers: 'myFlagUpdated', method: function() { this.log('myFlag is ' + this.get('myFlag')); } }] };
var moduleConstructor = function() { domino.module.call(this); var _self = this; this.checkbox = document.createElement('input'); this.checkbox.type = "checkbox"; this.checkbox.addEventListener('change', function(e) { _self.dispatchEvent('updateMyFlag', { myFlag: _self.checkbox.checked }); }); this.triggers.events.myFlagUpdated = function(controller) { _self.checkbox.checked = controller.get('myFlag'); }; };
// Configuration globale: domino.settings({ verbose: true, strict: true }); // Initialisation du contrôleur: var myController = new domino(config); // Initialisation du module: var myModule = myController.addModule(moduleConstructor); // Ajout de la checkbox dans le DOM: var body = document.getElementsByTagName('body')[0]; body.innerHTML = null; body.appendChild(myModule.checkbox);
/* Le module émet l'événement "updateMyFlag": */ > [myController] Iteration 1 (loop 1) > [myController] -> Events: ["updateMyFlag"] /* Le contrôleur met à jour la propriété "myFlag": */ > [myController] Iteration 2 (loop 1) > [myController] -> Update: ["myFlag"] /* Le contrôleur émet l'événement "myFlagUpdated": */ > [myController] Iteration 3 (loop 1) > [myController] -> Events: ["myFlagUpdated"] /* Notre hack s'exécute: */ > [myController] myFlag is true
/* Récupérer l'instance du contrôleur: */ var mc = domino.instances('myController'); /* Récupérer la valeur d'une propriété: */ console.log(mc.get('myFlag')); /* log: true */ /* Mettre à jour la propriété (directement): */ mc.update('myFlag', false); console.log(mc.get('myFlag')); /* log: false */ /* Mettre à jour la propriété (événementiel): */ mc.dispatchEvent('updateMyFlag', { myFlag: true }); console.log(mc.get('myFlag')); /* log: true */
Helping you select an MV* framework
(le fichier "app.js" sur Github)
présentation dispo sur github.com/jacomyal
et faite avec Reveal.js