2012-03-18 26 views
2

階層構造を持つJSONをモデルにマップしたいと思います。私はトップ階層のデータをモデルにマップすることができます。しかし、私は入れ子にした要素をネストしたModelにマップすることはできません。Backbone.jsのネストされたモデル

JSON

{ 
    "attr1":"data1", 
    "chi1": { 
     "attr1":"chi1_data" 
    }, 
    "list1":[ 
     {"name":"name1"}, 
     {"name":"name2"} 
    ] 
} 

はJavaScript

var Child2 = Backbone.Model.extend({ 
    fun1:function() { 
     alert("this is Child2"); 
    } 
}); 

var List1 = Backbone.Collection.extend({ 
    url: "list1", 
    model: Child2, 
    fun1:function() { 
     alert("this is List1"); 
    } 
}); 

var Child1 = Backbone.Model.extend({ 
}); 

var Root1 = Backbone.Model.extend({ 
    url: "sample.json", 
    defaults : { 
     list1 : new List1, 
     chi1 : new Child1, 
    } 
}); 

var View1 = Backbone.View.extend({ 
    el: "#friends", 
    events: { 
     "click button": "sample" 
    }, 
    initialize: function() { 
     this.root1 = new Root1(); 
    }, 
    sample: function() { 
     this.root1.fetch({ 
      success: function(model) { 
       // this is success 
       alert(model.get("attr1")); 

       // this is error 
       alert(model.get("list1").fun1()); 

       // this is error too. 
       model.get("list1").each(function(attr) { 
        alert(attr.fun1()); 
       }); 
      }, 
      error: function(model, res) { 
       alert("error: " + res.status); 
      } 
     }); 
    }, 
}); 

答えて

3

あなたは、このプラグインを見てみたいことがあります。

http://documentup.com/afeld/backbone-nested/

は正確に何をしたいではないかもしれないが、それは、少なくとも正しい方向にあなたを指すことができます。

あなたがすることができる他の事は、モデルの解析メソッドをオーバーライドしている...

parse: function(resp){ 
    // And setup the model using the raw resp 
    // The resp data is your json from the server and will 
    // be used to setup the model. So overriding parse, you can 
    // setup the model exactly they way you want. 
    return resp; 
} 
1

はjcreamerありがとう。

バックボーンネストされたプラグインは、私がしたいとは異なるようです。 私はモデルの巣を実現することができます。解析機能の使用時。

// it is able to get "chi1_data" 
new Child2(JSON.parse(JSON.stringify(resp["chi1"]))).get("attr1") 

// it is able to get "name2" 
new Child2(JSON.parse(JSON.stringify(new List1(JSON.parse(JSON.stringify(resp["list1"]))).get(2)))).get("name") 

私は、バックボーン・リレーショナル・プラグインを見つけました。私はこの

https://github.com/PaulUithol/Backbone-relational

をしようとします
関連する問題