Как обрабатывать несколько моделей Ember для одного и того же ресурса - PullRequest
0 голосов
/ 20 марта 2019

У меня есть модель user в app/models/user.js со следующим:

import attr from 'ember-data/attr';
import Model from 'ember-data/model';

export default Model.extend({
  email:        attr('string'),
  username:     attr('string'),
  firstName:    attr('string'),
  lastName:     attr('string'),
  currency:     attr('string'),
  locale:       attr('string'),
  avatar:       attr('string')
});

И я хочу обновить ее атрибуты на разных маршрутах:

В http://localhost:4200/account/profile Я хочу обновить только:

  • firstName
  • lastName
  • avatar
  • username

In http://localhost:4200/account/preferences Я хочу обновить только:

  • locale
  • currency

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

- models
  - user.js
- pods
   - account
     - profile
       - adapter.js
       - controller.js
       - model.js
       - route.js
       - serializer.js
       - template.hbs
     - preferences
       - adapter.js
       - controller.js
       - model.js
       - route.js
       - serializer.js
       - template.hbs

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

Каков будет хороший подход для этого?

1 Ответ

0 голосов
/ 20 марта 2019

Вы придерживаетесь своего рода смешанной структуры (классика + стручок) в своем приложении?

Если вы используете pod-based макет, вы можете уничтожить этот

- models
  - user.js

и имейте соответствующие поля в каждой модели вашего стручка. Скажи в

pods/account/profile/model.js

import attr from 'ember-data/attr';
import Model from 'ember-data/model';

export default Model.extend({
  email: attr('string'),
  username: attr('string'),
  firstName: attr('string'),
  lastName: attr('string'),
  avatar: attr('string')
});

pods/account/preferences/model.js

import attr from 'ember-data/attr';
import Model from 'ember-data/model';

export default Model.extend({
  currency: attr('string'),
  locale: attr('string')
});
...