Какая инфраструктура Javascript MVC лучше всего обрабатывает реляционные данные?

Я впервые пытаюсь попробовать JavaScript MVC-фреймворк, такой как Knockout, Backbone.js, Spine, JavaScriptMVC и т. Д.

Я начал просматривать некоторые документы, доступные для этих платформ, и у меня возникают проблемы с поиском примеров того, как они обрабатывают реляционные данные. Большинство из них используют список дел в качестве примера. Список ToDo хорош, но он не охватывает реляционные данные. Возможно, лучшим примером будет поваренная книга с моделью для рецептов и ингредиентов:

var Recipe = function(){
   this.name = "Pizza";
   this.description = "A delicious baked, flat, disc-shaped bread topped with tomato sauce and cheese.";
}

var Ingredient = function(){
   this.name = "Tomato sauce"
}

var IngredientToRecipe = function(){
   this.recipe = null;
   this.ingredient = null;
   this.quantity;
}

Примеры для моделей, которые я видел до сих пор, похоже, не касаются проблем взаимоотношений: внешних ключей, генерации идентификаторов и т. Д. Приведенный выше пример является отношением многие-ко-многим, но я был бы рад даже поддержке для отношений один ко многим.

Мне действительно нравятся вещи, предоставляемые этими платформами:

  • изменения в моделях автоматически обновляют представление (т.е. DOM)
  • автоматическое обновление модели на сервере при ее изменении
  • четкая организация кода
  • так далее...

Но я хотел бы получить совет о том, какая структура лучше всего обрабатывает отношения между моделями, и есть пример, где это делается.

Спасибо!

3 ответа

Решение

Sproutcore имеет хранилище данных на стороне клиента, которое позволяет связывать различные объекты модели друг с другом в отношениях toOne, toMany и ManyToMany. Вы можете написать запросы к хранилищу, которые автоматически обновляются при изменении данных. Точно так же, если вы делаете обновление, и объект модели изменяется, любые представления, присоединенные к этой модели (через контроллер), будут автоматически обновляться). Кроме того, SC имеет функцию вложенного хранилища, которая позволяет беспрепятственно отказаться от изменений для рабочих процессов типа "сохранить или отменить".

http://guides.sproutcore.com/records.html

В то время как Backbone ( намеренно) не поддерживает модели, содержащие другие модели / коллекции, очень изящно, Backbone-реляционная добавляет поддержку и работает довольно хорошо. Проверьте их документацию.

Я не думаю, что вы ищете MVC как таковой, я думаю, что вы ищете что-то с хорошей буквой "М". Так что вы можете искать что-то вроде нашей ассоциации моделей Ext JS. (Ext JS, конечно, полнофункциональный фреймворк, поэтому, если вы хотите посыпать что-то поверх jQuery, это не для вас.)

Вот документация для моделей в Ext JS 4, и вот руководство верхнего уровня для Ext JS 4 MVC