ember.js и сервер - PullRequest
       6

ember.js и сервер

42 голосов
/ 21 января 2012

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

Ответы [ 4 ]

51 голосов
/ 21 января 2012

Копаем немного вокруг emberjs на GitHub Я нашел это: https://github.com/emberjs/data:

Ember Data - это библиотека для загрузки моделей из слоя постоянства (такого какJSON API), обновляя эти модели, затем сохраняя изменения.Он предоставляет множество возможностей, которые вы найдете в серверных ORM, таких как ActiveRecord, но разработан специально для уникальной среды JavaScript в браузере.

Я бы также предложил прочитать Ember.js Live Коллекции .Вам нужно иметь коллекцию моделей, которые будут знать, как синхронизироваться со стороной сервера, возможный пример кода:

// 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 должна использоваться с осторожностью, поскольку она не готова к работе.

6 голосов
/ 21 января 2012

В Ember.js «модель», содержащаяся в объекте Ember, будет содержать дополнительную абстракцию базовой базы данных на стороне сервера, если вы ее используете.Контроллерная часть приложения должна иметь методы, позволяющие извлекать и отправлять данные, которые вызываются при необходимости для обновления модели (с использованием Ajax).Это хорошо, потому что у вас есть модель, которая может быстро реагировать на стороне клиента на любой ввод, который пользователь предоставляет приложению (нажатия клавиш, движения мыши и т. Д.) И выборочно выбирать, когда, например, делать относительно дорогие запросы к базе данных на стороне сервера.Таким образом, некоторая производительность приложения больше не ограничивается задержкой запросов данных на внешний сервер, что в некоторых случаях позволяет создавать приложения, чья скорость отклика приближается к скорости реагирования собственных приложений.

5 голосов
/ 11 марта 2013

Мне нравится изображать Ember.js такими парами

  • Представления и шаблоны коррелированы (очевидно), настройте Views-Class для управления шаблоном (например, classNames)
  • Маршрутизатор и Маршруты работают немного как контроллер в MVC. Они отвечают за направление запроса к правильной конечной точке
  • Контроллер и Модель ориентированы на модель, одна (Модель) описывает данные, которые вы будете обрабатывать в своем приложении, в то время как контроллер ведет себя как своего рода прокси (или декоратор, если это больше подходит вам). Например, шаблоны будут подключены к контроллеру и

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

App.PostController = Ember.ObjectController.extend({
  content: null,

  // initial value
  isExpanded: false,

  expand: function() {
    this.set('isExpanded', true)
  },

  contract: function() {
    this.set('isExpanded', false)
  }
});

Теперь вы можете взаимодействовать с представлением модели в терминах внешнего интерфейса, продуманного через контроллер. Расширение поста или нет не меняет модель, а только изменение данных.

Что касается перезагрузки данных с сервера, у меня есть два ответа для вас

  1. Я нашел эту статью весьма полезной для понимания связей (и простого опроса, хотя и простого)
  2. Если вы используете Rails, вам повезет с предстоящим Rails 4 Live, см. этот пост и демонстрацию для получения сочных деталей
1 голос
/ 01 августа 2013

Я понимаю, что это немного старый вопрос, но он находится на странице с самым высоким рейтингом для ember.js, поэтому я решил добавить немного.

Я использовал ember-model в последнее время для обработки привязки данных RESTful.В нем меньше наворотов, но для моих нужд это довольно прилично.По сути, это просто расширяет функциональные возможности модели, чтобы достаточно хорошо интегрироваться с сервером, проталкивающим объекты JSON через стандартный интерфейс REST.

...