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
Tweet

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