2012-03-18 1 views
2

Je veux mapper JSON ayant une structure hiérarchique sur le modèle. Je peux mapper les données à une hiérarchie supérieure sur le modèle. Cependant, je ne peux pas le mapper sur le modèle qui imbriqué l'élément que j'ai imbriqué.Modèle imbriqué dans 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); 
      } 
     }); 
    }, 
}); 

Répondre

3

Vous pouvez jeter un oeil à ce plugin.

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

peut-être pas exactement ce que vous voulez, mais il pourrait au moins vous orienter dans la bonne direction.

L'autre chose que vous pouvez faire est de remplacer la méthode d'analyse de votre modèle ...

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

merci jcreamer. Backbone-imbriqué plugin semble être différent de ce que je veux faire. Je peux réaliser le nid du modèle. En utilisant la fonction d'analyse.

// 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") 

J'ai trouvé la fiche Backbone-relationnel. Je vais essayer

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