PageRenderTime 44ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/class_8/bb_ng.md

https://github.com/codefellows/F2-javascript-textbook
Markdown | 181 lines | 146 code | 35 blank | 0 comment | 0 complexity | 272de6e6f35a039b0f1404d92ee0bc1a MD5 | raw file
  1. #Backbone and Angular
  2. - [MVC Design Pattern](http://blog.codinghorror.com/understanding-model-view-controller/)
  3. - [MOVE Design Pattern](http://cirw.in/blog/time-to-move-on)
  4. ## Tutorials
  5. - [Angular Videos](https://egghead.io/)
  6. - [Backbone Tutorial](http://adrianmejia.com/blog/2012/09/11/backbone-dot-js-for-absolute-beginners-getting-started)
  7. ##Code Snippets
  8. ### Angular
  9. ng.html
  10. ```html
  11. <!doctype html>
  12. <html ng-app>
  13. <head>
  14. <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.7/angular.min.js"></script>
  15. <script src="ngTabs.js"></script>
  16. <link rel="stylesheet" href="ngTabs.css">
  17. </head>
  18. <body>
  19. <h2>Tabs</h2>
  20. <div ng-controller="NgTabsCtrl">
  21. <div ng-show="tabs.length === 0">
  22. Loading...
  23. </div>
  24. <div ng-show="tabs.length > 0">
  25. <div ng-repeat="tab in tabs">
  26. <div class="tab" ng-class="{active: tab.name === activeTab.name}">
  27. <a class="tab-link" href="#" ng-click="showTab(tab)">{{tab.name}}</a>
  28. <div class="hidden">{{tab.content}}</div>
  29. </div>
  30. </div>
  31. <div class="active-tab-content">
  32. {{activeTab.content}}
  33. </div>
  34. </div>
  35. </div>
  36. </body>
  37. </html>
  38. ```
  39. ng.js
  40. ```javascript
  41. function NgTabsCtrl($scope, $http) {
  42. $scope.tabs = [];
  43. $http({method: 'GET', url: 'http://rs.hankyates.com:3000/content'})
  44. .success(onTabsFetched);
  45. $scope.showTab = function(tab){
  46. $scope.activeTab = tab;
  47. };
  48. function onTabsFetched(tabs){
  49. $scope.tabs = tabs;
  50. $scope.activeTab = $scope.tabs[0];
  51. }
  52. };
  53. ```
  54. ### Backbone
  55. ```html
  56. <!doctype html>
  57. <html class="no-js">
  58. <head>
  59. <meta charset="utf-8">
  60. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  61. <title>Ajax Tabs Using Backbone</title>
  62. <meta name="viewport" content="width=device-width, initial-scale=1">
  63. <link rel="stylesheet" href="app.css">
  64. </head>
  65. <body>
  66. <div id="tabs-app">
  67. <div class="hide-on-load">Loading...</div>
  68. <div class="show-on-load">
  69. <div class="tabs"></div>
  70. <div class="active-tab-content"></div>
  71. </div>
  72. </div>
  73. <script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
  74. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  75. <script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
  76. <script src="app.js"></script>
  77. <script type="text/template" id="tab-template">
  78. <div class="tab">
  79. <a href="#" class="tab-link"><%= name %></a>
  80. <div class="tab-content hidden"><%= content %></div>
  81. </div>
  82. </script>
  83. </body>
  84. </html>
  85. ```
  86. ```javascript
  87. $(function(){
  88. var TabModel = Backbone.Model.extend({
  89. defaults: {
  90. name: 'Unnamed Tab',
  91. content: 'Tab content not specified.'
  92. }
  93. });
  94. var TabsCollection = Backbone.Collection.extend({
  95. model: TabModel,
  96. url: 'http://rs.hankyates.com:3000/content'
  97. });
  98. var TabView = Backbone.View.extend({
  99. template: _.template($('#tab-template').html()),
  100. initialize: function(){
  101. this.render();
  102. },
  103. render: function(){
  104. this.$el.html(this.template(this.model.attributes));
  105. return this;
  106. }
  107. });
  108. var AppView = Backbone.View.extend({
  109. el: '#tabs-app',
  110. events: {
  111. 'click .tab-link': 'tabClickHandler'
  112. },
  113. initialize: function(){
  114. var self = this;
  115. this.$tabsList = this.$('.tabs');
  116. this.$activeTabContent = this.$('.active-tab-content');
  117. this.tabs = new TabsCollection;
  118. this.listenTo(this.tabs, 'add', this.addTab);
  119. this.tabs.fetch({ success: function(){
  120. self.render();
  121. }});
  122. },
  123. render: function(){
  124. var $firstTab = $('.tab').first();
  125. this.activateTab($firstTab);
  126. this.$el.addClass('loaded');
  127. },
  128. addTab: function(tab){
  129. var tabView = new TabView({ model: tab });
  130. this.$tabsList.append(tabView.el);
  131. },
  132. tabClickHandler: function(e){
  133. e.preventDefault();
  134. this.activateTab($(e.target).closest('.tab'));
  135. },
  136. activateTab: function($tab){
  137. var tabContent = $tab.find('.tab-content').html(),
  138. $allTabs = this.$el.find('.tab');
  139. this.$activeTabContent.html(tabContent);
  140. $allTabs.removeClass('active');
  141. $tab.addClass('active');
  142. }
  143. });
  144. new AppView();
  145. });
  146. ```