SlideShare a Scribd company logo
{ @r_mdias - rmdias.com } 
git.io/QQ7OIQ
{ RODOLFO 
DIAS } 
{ @r_mdias - rmdias.com }
{ RECIFE - BRAZIL }
{ FRONT END ENGINEER - UFMG }
{ / MINAS DEV }
{ DESIGN 
PATTERNS }
{ DESIGN 
PATTERNS } 
WHY 
USE IT??
SSP - The Simple Singleton Pattern
{ DESIGN 
PATTERNS ( in JS ) }
{ → DESIGN PATTERNS (in JS)} 
['Factory', 'Prototype', 'Mixin', 'Singleton']
{ → DESIGN PATTERNS (in JS)} 
['Factory', 'Prototype', 'Mixin', 'Singleton'] 
(A LITTLE 
HARD)
{ DESIGN 
PATTERNS ( in JS ) } 
(IN 
EASY WAY)
{ SSP }
{ SSP }
git.io/QQ7OIQ
git.io/QQ7OIQ
{ DENNIS 
CALAZANS } 
denniscalazans.com 
contato@denniscalazans.com
{ RODOLFO 
DIAS } 
rmdias.com 
contact@rmdias.com 
{ DENNIS 
CALAZANS } 
denniscalazans.com 
contato@denniscalazans.com
{ SSP 
WHAT’S IT ? }
{ SSP 
HOW IT 
WORKS? }
{ → HOW IT WORKS? } 
var SSP = SSP || {};
{ SSP 
USAGE }
{ → SSP USAGE } 
<!-- Call the SSP file --> 
<script src="SSP.js"></script>
{ → SSP USAGE } 
// SSP.MyModule.js 
SSP.MyModule = { 
setUp: function() { 
console.debug("My SSP module is runing!"); 
} 
}
{ → SSP USAGE } 
// SSP.MyModule.Child.js 
SSP.MyModule.Child = { 
setUp: function() { 
console.debug("My SSP module is runing!"); 
} 
}
{ → SSP USAGE } 
<!-- Incorporating Files --> 
<script src="SSP.js"></script> 
<script src="SSP.MyModule.js"></script> 
<script src="SSP.MyModule.Child.js"></script> 
<script>SSP.init();</script>
{ SSP 
METHODS 
AND 
PROPERTIES }
{ → SSP - PROPERTIES / _nameSpace } 
// All modules have a property called nameSpace that 
// returning string the name of module. 
SSP.MyModule = { 
setUp: function() { 
var self = this; 
console.debug(self._nameSpace); 
// return -> "SSP.MyModule" 
} 
}
{ → SSP - METHODS / .setUp( ) } 
// SetUp is a Main method. 
// It always runs when the father's module is called. 
SSP.MyModule = { 
setUp: function() { 
console.debug(‘My SSP Module is running!’); 
// return -> "My SSP Module is running!" 
} 
}
{ → SSP - METHODS / .init( ) } 
// This method initialize all modules from your application. 
SSP.init(); 
SSP.init(SSP.MyModule); 
SSP.init(SSP.MyModule, SSP.MyOtherModule);
{ → SSP - METHODS / .applyByNamespace(‘namespace’, params) } 
// Using this you can run a method that's located in other 
// module/part from your application, but using `_namespace`. 
// For example: 
SSP.applyByNamespace(‘SSP.MyModule'); 
// SSP.MyModule();
{ → SSP - METHODS / .applyByNamespace(‘namespace’, params) } 
// Using this you can run a method that's located in other 
// module/part from your application, but using `_namespace`. 
// For example: 
SSP.applyByNamespace(‘SSP.MyModule’, SomeParameter); 
// SSP.MyModule(SomeParameter);
{ → SSP - PROPERTIES AND METHODS } 
// Available Methods 
- _nameSpace; 
- .init(); 
- .setUp(); 
- .delegate(scope, method); 
- .readModule(Module); 
- .getByNamespace('namespace'); 
- .applyByNamespace('namespace'); 
- .initModuleByNamespace('nameSpace', params);
{ EXAMPLE 
→ TODO APP }
{ → TODO APP }
{ EXAMPLE 
→ TODO APP } 
(HOW 
WE DO)
{ → TODO APP } 
<script src="Todo.js"></script>
{ → TODO APP } 
'use strict'; 
function createTask(){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function updateTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function deleteTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function completeTask(taskID){ 
// body... 
};
{ → TODO APP } 
'use strict'; 
function buildTasksList(tasks) { 
// body... 
};
{ → TODO APP } 
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task');
{ → TODO APP } 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
});
{ → TODO APP } 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
});
'use strict'; 
function createTask(){ 
// body... 
}; 
function updateTask(taskID){ 
// body... 
}; 
function deleteTask(taskID){ 
// body... 
}; 
function completeTask(taskID){ 
// body... 
}; 
function taskCounter(tasks){ 
// body... 
}; 
function buildTasksList(tasks) { 
// body... 
};
'use strict'; 
function createTask(){ 
// body... 
}; 
function updateTask(taskID){ 
// body... 
}; 
function deleteTask(taskID){ 
// body... 
}; 
function completeTask(taskID){ 
// body... 
}; 
function taskCounter(tasks){ 
// body... 
}; 
function buildTasksList(tasks) { 
// body... 
}; 
| 
:(
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task'); 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
}); 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
| 
:(
var form, completeTaskButton, deleteTaskButton, updateTaskButton; 
form = document.querySelector('.submit-task'); 
completeTaskButton = document.querySelector('.complete-task'); 
deleteTaskButton = document.querySelector('.delete-task'); 
updateTaskButton = document.querySelector('.update-task'); 
form.addEventListener('submit', function(e) { 
createTask(taskName); 
buildTasksList(tasks); 
// body... 
}); 
completeTaskButton.addEventListener('click', function(e) { 
completeTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
deleteTaskButton.addEventListener('click', function(e) { 
deleteTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
updateTaskButton.addEventListener('click', function(e) { 
updateTask(taskID); 
buildTasksList(tasks); 
// body... 
}); 
| 
: (`
{ EXAMPLE 
→ TODO APP } 
(HOW TO DO 
USING SSP)
{ → TODO APP } 
<script src="SSP.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script> 
<script src="SSP.Todo.Requests.js"></script>
{ → TODO APP } 
<script src="SSP.js"></script> 
<script src="SSP.Todo.js"></script> 
<script src="SSP.Todo.Requests.js"></script> 
<script>SSP.init();</script>
{ → TODO APP } 
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
}, 
createTask : function() { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
{ → TODO APP } 
// SSP.Todo.Requests.js 
SSP.Todo.Requests = { 
setUp: function() { 
var self = this; 
}, 
getTodoList : function() { 
// body... 
}, 
setTodoList : function(parameter) { 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
SSP.Todo.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
X 
SSP.Todo.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
self.buildTasksList(self.Requests.getTodoList()); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
}
// SSP.Todo.JS 
SSP.Todo = { 
setUp: function() { 
var self = this; 
self.createTask(); 
self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file 
}, 
createTask : function() { 
var self = this; 
self.Requests.setTodoList(todoList); 
self.buildTasksList(self.Requests.getTodoList()); 
}, 
updateTask : function(taskID) { 
// body... 
}, 
updateTask : function(taskID) { 
// body... 
}, 
deleteTask : function(taskID) { 
// body... 
}, 
completeTask : function(taskID) { 
// body... 
}, 
buildTasksList : function(todoList){ 
// body... 
} 
} 
| 
: (
// SSP.Todo.Requests.js 
SSP.Todo.Requests = { 
setUp: function() { 
var self = this; 
}, 
getTodoList : function() { 
// body... 
}, 
setTodoList : function(parameter) { 
// body... 
} 
} 
| 
: (
SSP - The Simple Singleton Pattern
{ → TODO APP }
git.io/QQ7OIQ
{ SSP 
→ WHO USES IT? }
SSP - The Simple Singleton Pattern
git.io/QQ7OIQ
SSP - The Simple Singleton Pattern
{ VLW, FLWS O/ } 
{ @r_mdias - rmdias.com }
{ THANKS!! } 
{ @r_mdias - rmdias.com }

More Related Content

PDF
Aller plus loin avec Doctrine2
PDF
Modern Mobile Web Apps
PDF
Java script.trend(spec)
PDF
Progressive Mobile Web Apps
PDF
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
PDF
Discover ServiceWorker
PDF
Jak zabít několik much jednou ranou přechodem na fragmenty
PDF
Aplicacion turbogenerador java
Aller plus loin avec Doctrine2
Modern Mobile Web Apps
Java script.trend(spec)
Progressive Mobile Web Apps
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Discover ServiceWorker
Jak zabít několik much jednou ranou přechodem na fragmenty
Aplicacion turbogenerador java

What's hot (16)

PDF
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
PDF
HTTP Interceptors com AngularJS
PPTX
JS programowanie obiektowe
PDF
Java Script - Object-Oriented Programming
PDF
Юнит тестирование в Zend Framework 2.0
PDF
ECMA2015 INSIDE
PDF
Practical JavaScript Programming - Session 3/8
PDF
Algebra 1 fernando chamizo lorente
PDF
Proyecto Final Android-SQLite
PDF
5 Hidden Gems of Alloy UI
PDF
jQuery sans jQuery
DOCX
Mejor project
PDF
Practical JavaScript Programming - Session 2/8
PPTX
Testes unitários de JS com Jasmine e Karma
PDF
A slew of AACM 50th anniversary celebrations this weekend
PDF
Новое в Perl 5.10
FrontInterior 2014: 10 dicas de desempenho para apps mobile hibridas
HTTP Interceptors com AngularJS
JS programowanie obiektowe
Java Script - Object-Oriented Programming
Юнит тестирование в Zend Framework 2.0
ECMA2015 INSIDE
Practical JavaScript Programming - Session 3/8
Algebra 1 fernando chamizo lorente
Proyecto Final Android-SQLite
5 Hidden Gems of Alloy UI
jQuery sans jQuery
Mejor project
Practical JavaScript Programming - Session 2/8
Testes unitários de JS com Jasmine e Karma
A slew of AACM 50th anniversary celebrations this weekend
Новое в Perl 5.10
Ad

Viewers also liked (14)

PDF
JS4Girls
PPTX
Nunca foi tao facil testar
KEY
Design patterns
PDF
Design patterns - Exemples en Java
PDF
Introduction aux design patterns
PDF
Design Patterns (2003)
PPTX
les metriques de processus, de produit et de qualité
PPTX
Metrique
PDF
Cours design pattern m youssfi partie 6 proxy
PDF
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
PDF
Cours design pattern m youssfi partie 7 facade bridge flyweight
PDF
Cours design pattern m youssfi partie 1 introduction et pattern strategy
PDF
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
JS4Girls
Nunca foi tao facil testar
Design patterns
Design patterns - Exemples en Java
Introduction aux design patterns
Design Patterns (2003)
les metriques de processus, de produit et de qualité
Metrique
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 1 introduction et pattern strategy
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
Ad

SSP - The Simple Singleton Pattern

  • 1. { @r_mdias - rmdias.com } git.io/QQ7OIQ
  • 2. { RODOLFO DIAS } { @r_mdias - rmdias.com }
  • 3. { RECIFE - BRAZIL }
  • 4. { FRONT END ENGINEER - UFMG }
  • 5. { / MINAS DEV }
  • 7. { DESIGN PATTERNS } WHY USE IT??
  • 9. { DESIGN PATTERNS ( in JS ) }
  • 10. { → DESIGN PATTERNS (in JS)} ['Factory', 'Prototype', 'Mixin', 'Singleton']
  • 11. { → DESIGN PATTERNS (in JS)} ['Factory', 'Prototype', 'Mixin', 'Singleton'] (A LITTLE HARD)
  • 12. { DESIGN PATTERNS ( in JS ) } (IN EASY WAY)
  • 17. { DENNIS CALAZANS } denniscalazans.com contato@denniscalazans.com
  • 18. { RODOLFO DIAS } rmdias.com contact@rmdias.com { DENNIS CALAZANS } denniscalazans.com contato@denniscalazans.com
  • 19. { SSP WHAT’S IT ? }
  • 20. { SSP HOW IT WORKS? }
  • 21. { → HOW IT WORKS? } var SSP = SSP || {};
  • 23. { → SSP USAGE } <!-- Call the SSP file --> <script src="SSP.js"></script>
  • 24. { → SSP USAGE } // SSP.MyModule.js SSP.MyModule = { setUp: function() { console.debug("My SSP module is runing!"); } }
  • 25. { → SSP USAGE } // SSP.MyModule.Child.js SSP.MyModule.Child = { setUp: function() { console.debug("My SSP module is runing!"); } }
  • 26. { → SSP USAGE } <!-- Incorporating Files --> <script src="SSP.js"></script> <script src="SSP.MyModule.js"></script> <script src="SSP.MyModule.Child.js"></script> <script>SSP.init();</script>
  • 27. { SSP METHODS AND PROPERTIES }
  • 28. { → SSP - PROPERTIES / _nameSpace } // All modules have a property called nameSpace that // returning string the name of module. SSP.MyModule = { setUp: function() { var self = this; console.debug(self._nameSpace); // return -> "SSP.MyModule" } }
  • 29. { → SSP - METHODS / .setUp( ) } // SetUp is a Main method. // It always runs when the father's module is called. SSP.MyModule = { setUp: function() { console.debug(‘My SSP Module is running!’); // return -> "My SSP Module is running!" } }
  • 30. { → SSP - METHODS / .init( ) } // This method initialize all modules from your application. SSP.init(); SSP.init(SSP.MyModule); SSP.init(SSP.MyModule, SSP.MyOtherModule);
  • 31. { → SSP - METHODS / .applyByNamespace(‘namespace’, params) } // Using this you can run a method that's located in other // module/part from your application, but using `_namespace`. // For example: SSP.applyByNamespace(‘SSP.MyModule'); // SSP.MyModule();
  • 32. { → SSP - METHODS / .applyByNamespace(‘namespace’, params) } // Using this you can run a method that's located in other // module/part from your application, but using `_namespace`. // For example: SSP.applyByNamespace(‘SSP.MyModule’, SomeParameter); // SSP.MyModule(SomeParameter);
  • 33. { → SSP - PROPERTIES AND METHODS } // Available Methods - _nameSpace; - .init(); - .setUp(); - .delegate(scope, method); - .readModule(Module); - .getByNamespace('namespace'); - .applyByNamespace('namespace'); - .initModuleByNamespace('nameSpace', params);
  • 34. { EXAMPLE → TODO APP }
  • 35. { → TODO APP }
  • 36. { EXAMPLE → TODO APP } (HOW WE DO)
  • 37. { → TODO APP } <script src="Todo.js"></script>
  • 38. { → TODO APP } 'use strict'; function createTask(){ // body... };
  • 39. { → TODO APP } 'use strict'; function updateTask(taskID){ // body... };
  • 40. { → TODO APP } 'use strict'; function deleteTask(taskID){ // body... };
  • 41. { → TODO APP } 'use strict'; function completeTask(taskID){ // body... };
  • 42. { → TODO APP } 'use strict'; function buildTasksList(tasks) { // body... };
  • 43. { → TODO APP } var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task');
  • 44. { → TODO APP } form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... });
  • 45. { → TODO APP } completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... });
  • 46. { → TODO APP } deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... });
  • 47. { → TODO APP } updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... });
  • 48. 'use strict'; function createTask(){ // body... }; function updateTask(taskID){ // body... }; function deleteTask(taskID){ // body... }; function completeTask(taskID){ // body... }; function taskCounter(tasks){ // body... }; function buildTasksList(tasks) { // body... };
  • 49. 'use strict'; function createTask(){ // body... }; function updateTask(taskID){ // body... }; function deleteTask(taskID){ // body... }; function completeTask(taskID){ // body... }; function taskCounter(tasks){ // body... }; function buildTasksList(tasks) { // body... }; | :(
  • 50. var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task'); form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... }); completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... }); deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... }); updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... }); | :(
  • 51. var form, completeTaskButton, deleteTaskButton, updateTaskButton; form = document.querySelector('.submit-task'); completeTaskButton = document.querySelector('.complete-task'); deleteTaskButton = document.querySelector('.delete-task'); updateTaskButton = document.querySelector('.update-task'); form.addEventListener('submit', function(e) { createTask(taskName); buildTasksList(tasks); // body... }); completeTaskButton.addEventListener('click', function(e) { completeTask(taskID); buildTasksList(tasks); // body... }); deleteTaskButton.addEventListener('click', function(e) { deleteTask(taskID); buildTasksList(tasks); // body... }); updateTaskButton.addEventListener('click', function(e) { updateTask(taskID); buildTasksList(tasks); // body... }); | : (`
  • 52. { EXAMPLE → TODO APP } (HOW TO DO USING SSP)
  • 53. { → TODO APP } <script src="SSP.js"></script>
  • 54. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script>
  • 55. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script> <script src="SSP.Todo.Requests.js"></script>
  • 56. { → TODO APP } <script src="SSP.js"></script> <script src="SSP.Todo.js"></script> <script src="SSP.Todo.Requests.js"></script> <script>SSP.init();</script>
  • 57. { → TODO APP } // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; }, createTask : function() { // body... }, buildTasksList : function(todoList){ // body... } }
  • 58. { → TODO APP } // SSP.Todo.Requests.js SSP.Todo.Requests = { setUp: function() { var self = this; }, getTodoList : function() { // body... }, setTodoList : function(parameter) { // body... } }
  • 59. // SSP.Todo.JS SSP.Todo = { setUp: function() { }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 60. // SSP.Todo.JS SSP.Todo = { setUp: function() { SSP.Todo.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 61. // SSP.Todo.JS SSP.Todo = { setUp: function() { X SSP.Todo.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 62. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 63. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 64. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 65. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); self.buildTasksList(self.Requests.getTodoList()); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } }
  • 66. // SSP.Todo.JS SSP.Todo = { setUp: function() { var self = this; self.createTask(); self.buildTasksList(self.Requests.getTodoList()); // accessing module in another file }, createTask : function() { var self = this; self.Requests.setTodoList(todoList); self.buildTasksList(self.Requests.getTodoList()); }, updateTask : function(taskID) { // body... }, updateTask : function(taskID) { // body... }, deleteTask : function(taskID) { // body... }, completeTask : function(taskID) { // body... }, buildTasksList : function(todoList){ // body... } } | : (
  • 67. // SSP.Todo.Requests.js SSP.Todo.Requests = { setUp: function() { var self = this; }, getTodoList : function() { // body... }, setTodoList : function(parameter) { // body... } } | : (
  • 69. { → TODO APP }
  • 71. { SSP → WHO USES IT? }
  • 75. { VLW, FLWS O/ } { @r_mdias - rmdias.com }
  • 76. { THANKS!! } { @r_mdias - rmdias.com }