我正在尝试向我的 Ember 应用程序添加“配置文件管理”功能,使用ember-data
. 为此,我的后端/前端以下列方式一起玩:
- 后端返回一个配置文件数组,其中包含多个“配置文件对象”,具有众所周知的 ID,用于已登录用户的固定 URL:
/api/profile
。目前我有一个me
对象(与当前登录用户相关的设置)和一个my-company
对象(与属于当前登录用户的公司相关的设置)。添加更多对象很简单。对象不属于同一类,具有不同的属性。每种对象只有一个。 - 我可以使用不同的路由器/控制器/模板查看和编辑每个对象。大多数功能都是可重用的。对于路由器和控制器,我唯一需要调整的是
id
配置文件数组中的对象,以及到编辑控制器的路由。
通过使用这种方法,我可以轻松地将对象添加到配置文件中,并添加模板以显示和编辑每个对象的属性。我唯一需要做的是:
- 定义新对象的模型
- 基于已编码的 mixin 设置标准路由器和控制器
- 创建模板
所以这是非常简单和灵活的,这是我实现它的动机,但我有一个担心。由于我将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,但我也有这样的印象,即这可以降低我的应用程序这部分的复杂性。
可以在这里看到一个演示。