2

我正在尝试向我的 Ember 应用程序添加“配置文件管理”功能,使用ember-data. 为此,我的后端/前端以下列方式一起玩:

  1. 后端返回一个配置文件数组,其中包含多个“配置文件对象”,具有众所周知的 ID,用于已登录用户的固定 URL:/api/profile。目前我有一个me对象(与当前登录用户相关的设置)和一个my-company对象(与属于当前登录用户的公司相关的设置)。添加更多对象很简单。对象不属于同一类,具有不同的属性。每种对象只有一个。
  2. 我可以使用不同的路由器/控制器/模板查看和编辑每个对象。大多数功能都是可重用的。对于路由器和控制器,我唯一需要调整的是id配置文件数组中的对象,以及到编辑控制器的路由。

通过使用这种方法,我可以轻松地将对象添加到配置文件中,并添加模板以显示和编辑每个对象的属性。我唯一需要做的是:

  1. 定义新对象的模型
  2. 基于已编码的 mixin 设置标准路由器和控制器
  3. 创建模板

所以这是非常简单和灵活的,这是我实现它的动机,但我有一个担心。由于我将Profile模型中的所有属性放在一起:

App.User = Ember.Mixin.create({
    email : DS.attr('string')
});

App.Company = Ember.Mixin.create({
    vat : DS.attr('string')
});

// To do this, the profile model includes the User and Company mixins,
//   as well as some common properties.
// TODO: Any other way to do this?
App.Profile = DS.Model.extend(App.User, App.Company, {
    name  : DS.attr('string'),
    type  : DS.attr('string')
});

我担心当写回服务器时(目前我只尝试过FIXTURES),对象的属性Company会泄漏到User对象,反之亦然。

因此,问题是:如果模型具有未定义的属性(即,来自服务器的数据没有这些属性),在序列化对象时,这些属性是否会以值发送回服务器null,或者它们不会被设置在所有的JSON?请注意,属性并不是一开始就存在的,但模型具有“所有可能的属性,适用于所有不同的配置文件对象”。

也许还有另一种定义Profile模型的方法,而不包括所有不同对象的所有属性?我无法做到这一点:如果一个属性没有在模型中声明,它就不能在模板/控制器中使用(我想这是在模型中定义它们的全部意义)。

我还想听听有关所选方法的一些一般性反馈。我觉得通过在一个公共 URL 中包含所有这些“不同对象的一堆”,我有点过分弯曲 Ember,但我也有这样的印象,即这可以降低我的应用程序这部分的复杂性。

可以在这里看到一个演示。

4

1 回答 1

1

首先,我没有使用过ember-data,但我很确定未定义的属性也会发送到服务器。我还认为,这不是数据建模的好方法。我很确定你应该有你的App.Profile. 我会去做这样的事情:

App.Profile = DS.Model.extend({
    name  : DS.attr('string'),
    type  : DS.attr('string')
});

App.User = App.Profile.extend({
    email : DS.attr('string'),
    type  : DS.attr('string', {defaultValue : 'user'})
});

App.Company = App.Profile.extend({
    vat : DS.attr('string', {defaultValue : 'company'})
});

我想您也可以使用这种方法为所有人提供一个 API-Point,只需在App.Profile.

于 2013-08-20T14:23:08.043 回答