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

Ember.js и сервер

Я смотрю на Ember.js и читаю документы, чтобы попытаться понять, как их использовать. Я понимаю (довольно хорошо), за исключением одного. Для моего образа мышления в шаблоне MVC модель представляет собой хранилище данных в приложении. Я вижу, как это работает для клиентских данных в Ember.js. То, что я не получаю, - это связать эти данные с сервером, чтобы при изменении данных на клиенте изменения были обновлены на сервере. И наоборот. Я делаю это в своих веб-приложениях, создавая обратные вызовы Ajax/JSON на сервер, я просто не понимаю, как это сделать с помощью Ember.js.

4b9b3361

Ответ 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.