Я смотрю на Ember.js и читаю документы, чтобы попытаться понять, как их использовать. Я понимаю (довольно хорошо), за исключением одного. Для моего образа мышления в шаблоне MVC модель представляет собой хранилище данных в приложении. Я вижу, как это работает для клиентских данных в Ember.js. То, что я не получаю, - это связать эти данные с сервером, чтобы при изменении данных на клиенте изменения были обновлены на сервере. И наоборот. Я делаю это в своих веб-приложениях, создавая обратные вызовы Ajax/JSON на сервер, я просто не понимаю, как это сделать с помощью Ember.js.
Ember.js и сервер
Ответ 1
Копаем немного вокруг emberjs на GitHub Я нашел это: https://github.com/emberjs/data:
Ember Data - это библиотека для загрузки моделей из слоя сохранения (например, JSON API), обновление этих моделей, а затем сохранение изменений. Он предоставляет множество возможностей, которые вы найдете в ORM на стороне сервера, например ActiveRecord, но разработан специально для уникальной среды JavaScript в браузере.
Я также предлагаю читать Ember.js Live Collections. Вы хотите иметь коллекцию моделей, которые будут знать, как синхронизировать с серверной стороной, возможно, примерный код:
// our model
App.Person = Ember.Object.extend();
App.people = Ember.ArrayController.create({
content: [],
save: function () {
// assuming you are using jQuery, but could be other AJAX/DOM framework
$.post({
url: "/people",
data: JSON.stringify( this.toArray() ),
success: function ( data ) {
// your data should already be rendered with latest changes
// however, you might want to change status from something to "saved" etc.
}
});
}
});
Затем вы вызывали App.people.save()
в необходимых случаях.
Также не забудьте проверить эту статью, Рекомендации и инструкции по использованию Ember.js, которые идут глубже в сервер- клиент с Ember, а также упоминает emberjs/data.
Примечание. Библиотека данных Emberjs должна использоваться с осторожностью в отношении того, что она не готова к производству.
Ответ 2
В Ember.js "модель", содержащаяся в объекте Ember
, будет содержать дополнительную абстракцию базовой базы данных на стороне сервера, если вы ее используете. Затем часть контроллера приложения должна иметь методы, позволяющие извлекать и отправлять данные, которые вызываются при необходимости для обновления модели (с использованием Ajax). Это хорошо, потому что у вас есть модель, которая может быстро реагировать на стороне клиента на любой вход, предоставляемый пользователем приложением (нажатия клавиш, движения мыши, что угодно) и выборочно выбирать, когда делать относительно дорогостоящие запросы к базе данных на стороне сервера, например. Таким образом, некоторая производительность приложения больше не мешает латентности запросов данных к внешнему серверу, что в некоторых случаях может позволить вам создавать приложения, чья отзывчивость подходит к приложениям из родных приложений.
Ответ 3
Мне нравится изображать Ember.js в парах, подобных этому
- Представления и шаблоны коррелируются (очевидно), настраивают класс Views для управления шаблоном (например, имена классов)
- Маршрутизаторы и маршруты работают немного как контроллер в MVC. Они отвечают за маршрутизацию запроса на правильную конечную точку.
- Контроллер и модель являются ориентированными на модель, один (Модель) описывает данные, которые вы будете обрабатывать в своем приложении, в то время как контроллер ведет себя как своего рода прокси (или декоратор, если это больше в вашем переулке). Например, шаблоны подключаются к контроллеру и
В основном это означает, что вы загружаете свой контроллер (одиночный или массив) с помощью модели и теперь можете легко моделировать процессы, работающие над этой моделью (т.е. материал, который не касается модели в ее ядре/данных) в вашем контроллере. Для примера приложения для блога вы бы описали Post в модели и добавили что-то подобное для контроллера
App.PostController = Ember.ObjectController.extend({
content: null,
// initial value
isExpanded: false,
expand: function() {
this.set('isExpanded', true)
},
contract: function() {
this.set('isExpanded', false)
}
});
Теперь вы можете взаимодействовать с представлением модели в терминах внешнего мышления через контроллер. Расширение сообщения или нет не изменяет модель, только изменение данных делает.
Что касается перезагрузки данных с сервера, у меня есть два ответа для вас.
- Я нашел эту статью, весьма полезную для понимания соединений (и простой опрос, хотя и простой)
- Если вы используете Rails, вам повезет с предстоящими Rails 4 Live, см. этот пост и демо для сочных частей.
Ответ 4
Я понимаю, что это немного старый вопрос, но он на странице с наивысшим рейтингом для ember.js, поэтому я решил, что добавлю немного.
Я использовал ember-model в последнее время для обработки привязки данных RESTful. У нее меньше колоколов и свистков, но для моих потребностей это довольно прилично. В принципе, он просто расширяет функциональность модели, чтобы хорошо интегрировать ее с сервером, нажимая объекты JSON через стандартный интерфейс REST.