2

所以我有一个 ember-data 模型,我希望我的用户能够为每个项目创建不同/更多的 DS.attr 并随意调用它们。然后这会将json发送到我使用mondodb的rails服务器。然后我可以检查是否定义了密钥,如果没有为该文档创建它并将其保存在 mongo.xml 中。

问题是您必须在扩展 DS.Model 时对所有 DS.attr 进行硬编码,但那时我并不了解它们。

有没有办法重新打开 DS.Model 并以某种方式循环传递的 json 键(或者我可以将 allKeys 字段中的所有键从 rails 传递给客户端???)。

那么当有人想要创建不同的属性时,我可以动态地重新打开模型并添加这个 DS.attr 吗?

任何人有任何想法如何做到这一点,或者如果它甚至可能?

任何帮助、例子或想法都会很棒!

非常感谢瑞克

4

1 回答 1

2

假设您有一个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.idin targetId、 in theModelTypeyou storeApp.Post等存储起来。

让我知道这是否适合你。

于 2012-11-13T14:49:36.643 回答