2012-02-03 16 views
2

私は、MVCフレームワークとしてbackbone.jsを使用してWebアプリケーションを構築しています。私は自分のモデルを設計するのに苦労しています。私は1つの親/主オブジェクトを持っていますが、それは本質的にはかなり複雑で/ネストされています。つまり、50以上の属性といくつかのネストが続いています。どのような私は苦労していますと、次のとおりです。backbone.js複合モデル

{section1:{ 
     key1:"value1", 
     key1:"value2"}, 
    section2:{ 
     key1:"value1", 
     key1:"value2"} 
    } 

は私の好きな物を平らにする必要があります:

{section1_key1:"value1", 
    section1_key2:"value2", 
    section2_key1:"value1", 
    section2_key2:"value2" 
    } 

または私がすべき:

  1. は使用

    私のようなものを持っていますバックボーンネストされたプラグインを使用して、大きなネストされたJSONオブジェクトをそのまま渡しますか?

  2. を作成するか、各セクションごとに別々のモデルを作成し、いずれかの親の モデル内に何らかの形でネストしてください。
  3. または単に子オブジェクトのためのモデルを作成し、入れ子の心配はないと言及感謝

提案のいくつかのタイプを追加します。

+1

よくある質問は次のとおりです。http://documentcloud.github.com/backbone/#FAQ-nested – tkone

答えて

3

私は今もこの問題に苦しんでいます。だから、与えられた

私は別のモデルに出て構築された、ネストされたセクションのそれぞれを持っている、とPythonでSQLOBJECTに似たインターフェイスを作成(または実際に任意のORM)オプション2

に傾いてる

シンプルなブログ記事のアイデア:

var Tag = Backbone.Model.extend({ 
    defaults: { 
     name: '' 
    }, 
    validate: function(atts){ 
     if(!atts.name || atts.name.length < 2){ 
      return "You must provide a name that's longer than 2 characters"; 
     } 
    } 
}); 

var TagList = Backbone.Collection.extend({ 
    model: Tag 
}) 

var Entry = Backbone.Model.extend({ 
    defaults: { 
     author: "Todd", 
     pub_date: new Date(), 
     content: "", 
     title: "", 
     tags: new TagList() 
    }, 
    add_tag: function(tag){ 
     var tag_collection = this.get('tags'); 
     tag_collection.add({name: tag}); 
     this.set({tags: tag_collection}); 
    }, 
    remove_tag: function(tag){ 
     tag.destroy(); 
    }, 
    tags: function(){ 
     return this.get('tags').models; 
    } 
}); 

代替アイデアはinitializeは逆ネスティングおよび作成を処理し、そのモデルのプロパティとして格納されているコレクションに項目を追加できるようにするだろう。

+0

私の場合、ほとんどの子オブジェクト/モデルは親と1対1の関係にありますが。ネスティングの理由は、属性のせん断数(50+)を考慮して複雑さを軽減するためです。 – whyvez

関連する問題