Подтвердить что ты не робот

Использование моделей Backbone с AngularJS

Недавно я думал о различиях и сходствах между Backbone.js и AngularJS.

То, что я нахожу очень удобным в Backbone, - это модели Backbone и модели Backbone-Collections. Вам просто нужно установить urlRoot, а затем связь с сервером через Ajax в основном работает.

Нельзя ли использовать только шаблонные модели и коллекции в приложении AngularJS? Таким образом, у нас будет лучшая двухсторонняя привязка данных по двум направлениям с AngularJS и удобный доступ к серверной стороне (или другим параметрам хранилища) через Backbone-Models и Collections.

Быстрый поиск в Интернете не показал ни одного сайта, предлагающего этот сценарий использования. Все ресурсы либо говорят об использовании той или иной инфраструктуры.

Есть ли у кого-то опыт использования моделей Backbone-моделей или коллекций с помощью AngularJS. Разве они не будут хорошо дополнять друг друга? Я что-то не хватает?

4b9b3361

Ответ 1

рабочая привязка, например, выше... http://jsbin.com/ivumuz/2/edit

он демонстрирует способ работы с Backbone Models с AngularJS. но соединение с сеттерами/геттерами будет лучше.

Ответ 2

Имел подобную идею в виду и придумал эту идею: Добавьте только атрибут getter и setter для любой модели.

Backbone.ngModel = Backbone.Model.extend({
        initialize: function (opt) {
         _.each(opt, function (value, key) {
             Object.defineProperty(this, key, {
                 get: function () {
                     return this.get(key)
                  },
                 set: function (value) {
                     this.set(key, value);
                 },
                 enumerable: true,
                 configurable: true
             });
         }, this);
     }
 });

Смотрите скрипту: http://jsfiddle.net/HszLj/

Ответ 3

Мне было интересно, сделал ли кто-нибудь это тоже. В моем последнем/первом angular приложении я обнаружил, что angular не хватает моделей и коллекций (если я, конечно, не пропустил что-то!). Конечно, вы можете вытащить данные с сервера с помощью $http или $resource, но что, если вы хотите добавить собственные методы/свойства к вашим моделям или коллекциям. Например, скажем, у вас есть коллекции автомобилей, и вы хотите рассчитать общую стоимость. Что-то вроде этого:

С помощью Backbone Collection это было бы довольно легко реализовать:

carCollection.getTotalCost()

Но в Angular вам, вероятно, придется обернуть свой собственный метод в службу и передать вам свою коллекцию, например:

carCollectionService.getTotalCost(carCollection)

Мне нравится подход Backbone, потому что он читает чище, на мой взгляд. Однако получение двухсторонней привязки данных является сложным. Проверьте этот пример JSBin.

http://jsbin.com/ovowav/1/edit

Когда вы редактируете номера, коллекция .totalCost не обновляется, так как свойства car.cost не устанавливаются через model.set().

Вместо этого я в основном использовал свои собственные конструкторы/ "классы" для моделей и коллекций, скопировал подмножество Backbone API из Backbone.Model и Backbone.Collection и изменил мои пользовательские конструкторы/классы, чтобы он работал с angular привязка данных.

Ответ 4

Попробуйте взглянуть на restangular.

Я нигде не реализовал его, но пару дней назад я поговорил об этом. Кажется, эта проблема решается с помощью angular.

Видео: http://www.youtube.com/watch?v=eGrpnt2VQ3s

Ответ 5

Действительный вопрос наверняка.

Множество ограничений с текущей реализацией $resource, в котором, помимо прочего, нет внутреннего управления коллекциями, например Backbone.Collection. Написав свой собственный уровень управления коллекцией/ресурсами в angular (используя $http, а не $resource), теперь я вижу, могу ли я заменить большинство внутренних элементов шаблона для коллекций и моделей с базой.

Пока выборка и добавление являются безупречными и сохраняют код, но привязка этих базовых моделей (или атрибутов внутри, скорее) к ng-моделям на входах для редактирования еще не работает.

@ericclemmons (github) сделал то же самое и заставил двоих хорошо жениться - я спрошу его, приготовлю свой тест и опубликую заключение...

Ответ 6

Мне было интересно то же самое -

Это прецедент:

salesforce mobile sdk (hybrid) имеет функцию smartstore/smartsync, которая рассчитывает базовые модели/коллекции, которые сохраняются в локальном хранилище для автономного доступа.

И вы догадались, что правильно, мы хотим использовать angularjs для отдыха гибридного приложения.

Действительный вопрос.

-Sree

Ответ 7

Вы должны посмотреть на шаблон angularJS с описанием здесь. Парс - это позвоночник, но не совсем основа. Вот где я начинаю свое представление о проекте angularJS backboneJS