En En

Определение моделей


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

Если вы хотите сделать новую модель для своего приложения, вам нужно создать новый файл в папке models с расширением DS.Model. Удобнее всего это сделать с помощью одной из команд генератора Ember CLI. Например, создадим модель person:

ember generate model person

Так мы создадим следующий файл:

app/models/person.js

import DS from 'ember-data';

export default DS.Model.extend({
});

После определения класса модели можно искать записи этого типа и работать с ними.

Определение атрибутов

Модель person, которую мы сгенерировали ранее, не имеет атрибутов. Добавим имя, фамилию и дату рождения с помощью DS.attr:

app/models/person.js

import DS from 'ember-data';

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),
  birthday: DS.attr()
});

Атрибуты используются при обращении полезной нагрузки в формате JSON, которая возвращается с сервера, в запись и при сериализации записи для сохранения на сервере после ее изменения.

Вы можете использовать атрибуты как любое другое свойство, а также как часть вычисляемого свойства. Вам часто будет нужно определять вычисляемые свойства, которые сочетают или изменяют примитивные атрибуты.

app/models/person.js

import DS from 'ember-data';

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),

  fullName: Ember.computed('firstName', 'lastName', function() {
    return `${this.get('firstName')} ${this.get('lastName')}`;
  })
});

Подробнее о добавлении вычисляемых свойств классам смотрите в главе «Вычисляемые свойства».

Преобразования

Вы можете обнаружить, что тип атрибута, возвращенный сервером, не соответствует типу, который вы хотели бы использовать в своем коде JavaScript. Ember Data позволяет вам определить для типов атрибутов простые методы сериализации и десериализации, которые называют преобразованиями. Вы можете указать преобразование для атрибута, предоставив имя преобразования в качестве первого аргумента для метода DS.attr. Ember Data поддерживает типы string, number, boolean и data. Они задают значению тип данных JavaScript, соответствующий их имени.

app/models/person.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  age: DS.attr('number'),
  admin: DS.attr('boolean'),
  birthday: DS.attr('date')
});

Преобразование date превращает строку ISO 8601 в объект даты JavaScript.

Преобразование boolean превращает значения в true или false. Строки «true» или «t» в любом регистре, «1» и число 1 — все будут превращены в true или false.

Преобразования необязательны. Если вы не указываете имя преобразования, Ember Data не будет дополнительно обрабатывать значение.

Индивидуальные преобразования

Вы также можете создать индивидуальные преобразования с помощью генератора transform в Ember CLI:

ember generate transform dollars

Это простое преобразование, которое переводит значения между центами и долларами США.

app/transforms/dollars.js

import DS from 'ember-data';

export default DS.Transform.extend({
  deserialize: function(serialized) {
    return serialized / 100; // returns dollars
  },

  serialize: function(deserialized) {
    return deserialized * 100; // returns cents
  }
});

Преобразование имеет две функции: serialize и deserialize. Десериализация преобразует значение в формат, который ожидает клиент. Сериализация делает обратное и преобразует значение в формат, который ожидает слой хранения данных.

Можно использовать индивидуальное преобразование dollars таким образом:

app/models/product.js

import DS from 'ember-data';

export default DS.Model.extend({
  spent: DS.attr('dollars')
});

Варианты

DS.attr может также принимать хеш с вариантами в качестве второго параметра. В данный момент доступен только вариант defaultValue, который может использовать значение или функцию, чтобы назначить исходное значение атрибута, если оно не предоставляется.

В следующем примере мы определяем, что verified имеет исходное значение false и createdAt устанавливает по умолчанию время создания модели в качестве текущей даты:

app/models/user.js

import DS from 'ember-data';

export default DS.Model.extend({
  username: DS.attr('string'),
  email: DS.attr('string'),
  verified: DS.attr('boolean', { defaultValue: false }),
  createdAt: DS.attr('date', {
    defaultValue() { return new Date(); }
  })
});

Комментарии (0)

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.