假设您有一个App.Post
模型并且您希望您的用户为帖子存储额外的属性。首先创建一个模型App.MyModelTypes
并将所有模型类型存储在其中:
App.MyModelTypes = DS.Model.extend({
modelType: DS.attr('string') // e.g. App.Post, App.Comment
attributes: DS.hasMany('App.Attribute')
});
那么你App.Post
应该喜欢:
App.Post = DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string'),
// ... other base attributes
});
定义模型App.Attribute
如下:
App.Attribute = DS.Model.extend({
name: DS.attr('string')
attrType: DS.attr('string'),
theModelType: DS.belongsTo('App.Model'),
attributeValues: DS.hasMany('App.AttributeValue')
});
当用户为 post 创建一个新属性时,应用程序应该创建一个App.Attribute
属于 App.MyModelType的新属性App.Post
。
最后,您需要一个模型来存储 Posts 的自定义属性值:
App.AttributeValue = DS.Model.extend({
theModelType: DS.belongsTo('App.MyModelTypes'),
targetId: DS.attr('number'),
attribute: DS.belongsTo('App.Attribute'),
value: DS.attr('string') // attribute.attrType will give us the type
});
当用户编辑某个帖子的属性值时,您将post.id
in targetId
、 in theModelType
you storeApp.Post
等存储起来。
让我知道这是否适合你。