首页 > 解决方案 > 如何处理同一资源的多个 ember 模型

问题描述

我有一个模型userapp/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我只想更新:

http://localhost:4200/account/preferences我只想更新:

我正在使用 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模型。

这样做的好方法是什么?

标签: ember.jsember-data

解决方案


您是否在您的应用程序中遵循一种混合结构(经典 + pod)?

如果您使用的是pod-based布局,您可以销毁它

- models
  - user.js

并在您的 pod 的每个模型中都有相应的字段。说进去

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')
});

推荐阅读