【问题标题】:Create subclass of a model创建模型的子类
【发布时间】:2024-01-24 11:54:01
【问题描述】:

在我的应用程序中,我有一个模型 Comment,它与模型 author 有关系 User

用Java 术语来说,这个模型User 是一个抽象类:模型实例的类型要么是Student,要么是Teacher。为此,模型User 有一个属性type。所以结构如下:

App.Comment = DS.Model.extend({
    author: DS.belongsTo('user'),
    ...
});  

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

App.Student = App.User.extend({
    ...
});

App.Teacher = App.User.extend({
    ...
});

通过 REST API,我收到了 Comment 的列表,包括它们各自的 author

默认情况下,Ember 将为每个作者创建一个 User 模型的实例。

但是,我希望它创建 StudentTeacher,具体取决于请求响应中的 type 属性。

实现这一目标的最佳方法是什么?在某个地方,我应该能够覆盖将 JSON 键映射到 Ember 模型的函数。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    好的,我找到了。事实证明 Ember 支持多态模型,所以我通过将 {polymorphic: true} 添加到 author 关系轻松解决了它。

    App.Comment = DS.Model.extend({
        author: DS.belongsTo('user', { polymorphic: true }),
        ...
    });
    

    【讨论】:

      【解决方案2】:

      我会尝试覆盖 App.Comment 的序列化程序。你可以找到一些示例文档here

      【讨论】: