所以我有一个ember-data模型,我希望我的用户能够为每个项目创建不同的/更多的DS.attr,并随心所欲地叫它们。这将把json发送到rails服务器,我在那里使用mondodb。然后,我可以检查key是否已定义,如果没有,则为该文档创建它,并将其保存在mongo中。
问题是,在扩展DS.attr时,你必须硬编码所有的DS.Model,但我当时并不完全了解它们。
有没有办法重新打开DS.Model并以某种方式循环传递的json键(或者我可以将allKeys字段中的所有键从rails传递给客户机?)。
那么,当有人想要创建不同的属性时,我可以动态地重新打开模型并添加这个DS.attr吗?
有没有人知道怎么做或者这是否可能??
任何帮助,例子或想法都会很棒!
谢谢你,瑞克
发布于 2012-11-13 22:49:37
假设您有一个App.Post模型,并且希望您的用户存储帖子的附加属性。首先创建一个模型App.MyModelTypes,并将您所有的modelTypes存储在其中:
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.MyModelType App.Post的新App.Attribute。
最后,您需要一个模型来存储帖子的自定义属性值:
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存储在targetId中,在theModelType中存储App.Post,依此类推。
如果这对你有效,请让我知道。
https://stackoverflow.com/questions/13362214
复制相似问题