Скрипты
Угловой
<script src= “https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js”></script>
Магистраль
<script src= “https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js”></script>
API
Угловой
Создание нового углового приложения
var app = angular.module( ‘appName’ , [])
Создание контроллеров
app.controller( 'controllerName' , function ( $scope ) { });
Создание моделей
<p ng-model='modelName'>{{ modelName }}</p>
Отношения модель/контроллер
<div ng-controller='controllerName'> <p ng-model='modelName'>{{ modelName }}</p> </div>
Магистраль
Представления поставляются с функциями инициализации и рендеринга. Модели поставляются с функцией инициализации.
Создание моделей
var AppModel = Backbone.Model.extend({ initialize: function () { } });
Создание представлений
var AppView = Backbone.View.extend({ initialize: function () { this.render(); }, render: function () { } });
Связь модель/представление
var appView = new AppView({ model: new AppModel() });
Создание приложения
Угловой
index.html
<body ng-app=‘appName’>
app.js
var app = angular.module( ‘appName’ );
Магистраль
index.html
<body> <script> $(function () { var app = new AppModel(); var appView = new AppView({ model: app }); $(‘body’).append(appView.render()); }); <script> </body>
Визуализация представлений
Угловой
Использует контроллеры для обновления данных в html. Любые изменения немедленно отображаются из-за двусторонней привязки данных Angular.
Каждый контроллер связан с partial html, в котором установлены модели. К каждому контроллеру также прикреплен уникальный объект $scope, который позволяет ему манипулировать моделями, установленными в партиале,с которым он связан.
В приведенном ниже примере файла index.html контроллер firstController связан со всем html в содержащем его div — этот блок html является частичным, связанным с этим контроллером. $scope firstController дает ему доступ к модели textToRender для манипулирования/обновления.
Контроллер secondController связан со всем html во втором div, и поэтому его $scope позволяет ему получить доступ к модели moreTextToRender. В коде нашего secondController мы не сможем ссылаться на модель textToRender, так как эта модель находится в $scope firstController.
index.html
<div ng-controller="firstController"> <p ng-model=“textToRender”>{{ textToRender }}</p> </div> <div ng-controller="secondController"> <p ng-model="moreTextToRender">{{ moreTextToRender }}</p> </div>
controller.js
app.controller(‘firstController’, function ( $scope ) { $scope.textToRender = "Hello World"; }); app.controller('secondController', function ( $scope ) { $scope.moreTextToRender = "Goodbye World"; });
Отрисовано index.html
<div ng-controller=”firstController”> <p ng-model="textToRender">Hello World</p> </div> <div ng-controller="secondController"> <p ng-model="moreTextToRender">Goodbye World</p> </div>
Магистраль
Использует базовый объект View для визуализации базового объекта Model на основе свойств или изменений, заданных в связанной модели. Поскольку Backbone не использует двустороннюю привязку данных, каждое связанное представление необходимо визуализировать и повторно визуализировать связанные с ним изменения модели*.
Точно так же каждое представление в Backbone имеет доступ только к элементам в связанной с ним области. Хотя Backbone не предоставляет пользовательскую переменную $scope, представление backbone не может изменять html-элементы, с которыми оно не связано. Кроме того, он может изменять и обнаруживать изменения только в одной модели, которая была передана в качестве параметра (на который ссылается this.model для доступа к атрибутам и функциям этой модели).
AppModel.js
var AppModel = Backbone.Model.extend({ initialize: function () { this.set('textToRender', 'Hello World'); } });
AppView.js
var AppView = Backbone.View.extend({ tagName: 'div', initialize: function () { this.render(); }, render: function () { return this.$el.html([ this.model.get('textToRender') ]); } });
* Представление и модель становятся связанными, когда в них передается конкретный экземпляр модели.
<body> <script> $(function () { var firstApp = new AppModel(); var secondApp = new AppModel(); var firstAppView = new AppView({ model: firstApp }); var secondAppView = new AppView({ model: secondApp }); }); </script> </body>