Какая инфраструктура 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 имеет функцию вложенного хранилища, которая позволяет беспрепятственно отказаться от изменений для рабочих процессов типа "сохранить или отменить".
В то время как Backbone ( намеренно) не поддерживает модели, содержащие другие модели / коллекции, очень изящно, Backbone-реляционная добавляет поддержку и работает довольно хорошо. Проверьте их документацию.
Я не думаю, что вы ищете MVC как таковой, я думаю, что вы ищете что-то с хорошей буквой "М". Так что вы можете искать что-то вроде нашей ассоциации моделей Ext JS. (Ext JS, конечно, полнофункциональный фреймворк, поэтому, если вы хотите посыпать что-то поверх jQuery, это не для вас.)
Вот документация для моделей в Ext JS 4, и вот руководство верхнего уровня для Ext JS 4 MVC