Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Better Structure JavaScript

Better Structure JavaScript

This is a talk that I gave at Munich about structuring JavaScript code using RequireJS with Backbonejs.

Avatar for Zafar Saleem

Zafar Saleem

November 13, 2014

Other Decks in Programming

Transcript

  1. Traditional JS file injection <!DOCTYPE html> <html lang="en"> <head> <meta

    charset="UTF-8"> <title>Title</title> </head> <body> <script src="vendors/jquery.js"></script> <script src="vendors/mutators.js"></script> <script src="vendors/memento.js"></script> <script src="vendors/workflow.js"></script> <script src="vendors/validation.js"></script> <script src="vendors/nested.js"></script> <script src="vendors/relational.js"></script> <script src="scripts/InvoiceItemModel.js"></script> <script src="scripts/BuyerModel.js"></script> <script src="scripts/main.js"></script> </body> </html>
  2. Requirejs JS file injection <!DOCTYPE html> <html lang="en"> <head> <meta

    charset="UTF-8"> <title>Title</title> </head> <body> <script data-main=”scripts/main.js" src=”libs/require.js"></script> </body> </html>
  3. config(); require.config({ paths: { 'jquery' : 'libs/jquery/dist/jquery', ’mutators' : 'libs/mutators/mutators',

    ’validation' : 'libs/validation/validation', 'text' : 'plugins/text' } });
  4. config(); require.config({ paths: { 'jquery' : 'libs/jquery/dist/jquery', ’mutators' : 'libs/mutators/mutators',

    ’validation' : 'libs/validation/validation', 'text' : 'plugins/text' } });
  5. Requirejs + Models define( [‘backbone’], function (Backbone) { var BuyerModel

    = Backbone.Model.extend({ }); return BuyerModel; });
  6. Models attributes define( [‘backbone’], function (Backbone) { var BuyerModel =

    Backbone.Model.extend({ defaults: { ‘firstName’: ‘John’, ‘LastName’: ‘Woo’ } }); return BuyerModel; });
  7. Models attributes + Methods define( [‘backbone’], function (Backbone) { var

    BuyerModel = Backbone.Model.extend({ validate: function (attr) { } }); return BuyerModel; });
  8. Models attributes + Methods define( [‘backbone’], function (Backbone) { var

    BuyerModel = Backbone.Model.extend({ relations: [{ type: Backbone.HasOne, key: 'user', relatedModel: UserModel, reverseRelation: { type: Backbone.HasOne, key: 'buyer' } }] }); return BuyerModel; });
  9. Requirejs + Collections define( [‘backbone’], function (Backbone) { var BuyerCollections

    = Backbone.Collection.extend({ }); return BuyerCollection; });
  10. Collections + Model define( [‘backbone’, ‘BuyerModel’], function (Backbone, BuyerModel) {

    var BuyerCollections = Backbone.Collection.extend({ model: BuyerModel }); return BuyerCollection; });
  11. Requirejs + Views define( [‘backbone’], function (Backbone) { var BuyerView

    = Backbone.View.extend({ }); return BuyerView; });
  12. Views Usage define( [‘backbone’], function (Backbone) { var BuyerView =

    Backbone.View.extend({ }); return BuyerView; }); new BuyerModel({ collection: BuyerCollection });
  13. Views Attributes + Methods define( [‘backbone’], function (Backbone) { var

    BuyerView = Backbone.View.extend({ el: ‘ul’, }); return BuyerView; });
  14. Views Attributes + Methods define( [‘backbone’], function (Backbone) { var

    BuyerView = Backbone.View.extend({ events: { ‘click .button’: ‘callbackMethod’ }, callbackMethod: function () { alert(‘I am called’); } }); return BuyerView; });
  15. Views Attributes + Methods define([‘backbone’], function (Backbone) { var BuyerView

    = Backbone.View.extend({ initialize: function () { alert(‘I am constructor method’); } }); return BuyerView; });
  16. Views Attributes + Methods define([‘backbone’], function (Backbone) { var BuyerView

    = Backbone.View.extend({ render: function () { this.$el.append(‘<li>I am rendered</li>’); } }); return BuyerView; });
  17. Summary § Traditional way of injecting JavaScript Files § Requirejs (Asynchronous Module

    Definition) § define(), require(), config() § Structure JS using frameworks using Backbone § Views, Collections and Models