2

だから私は残り火データモデルを持っていて、ユーザーがアイテムごとに異なる/より多くのDS.attrを作成し、好きなように呼び出すことができるようにしたいと思っています。これにより、jsonがmondoddbを使用しているRailsサーバーに送信されます。次に、キーが定義されているかどうかを確認し、定義されていない場合は、このドキュメント用に作成してmongoに保存します。

問題は、DS.Modelを拡張するときにすべてのDS.attrをハードコーディングする必要があることですが、その時点ではそれらすべてを知りません。

DS.Modelを再度開いて、渡されたjsonキーをループする方法はありますか(または、allKeysフィールドのすべてのキーをrailsからクライアントに渡すことができます???)。

次に、誰かが別の属性を作成したい場合、モデルを動的に再度開いて、このDS.attrを追加できますか?

誰かがこれを行う方法、またはそれが可能であるかどうかについてのアイデアはありますか?

ヘルプ、例、アイデアがあれば私は素晴らしいです!

どうもありがとうリック

4

1 に答える 1

2

モデルが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')
});

ユーザーが投稿用の新しい属性を作成する場合、アプリはApp.AttributeApp.MyModelTypeに属する新しい属性を作成する必要がありますApp.Post

最後に、投稿のカスタム属性値を格納するためのモデルが必要です。

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、に保存targetIdtheModelTypeますApp.Post

それがあなたのために働くかどうか私に知らせてください。

于 2012-11-13T14:49:36.643 に答える