Bawn
Bawn

Reputation: 509

Backbone not parsing JSON correctly

Overview

I have a JSON object being passed to my backbone model. I have a parse function in the backbone model to convert some of the incoming attributes. The issue is when I fetch this model the attributes are not parsed and are just added to the model. The image at the bottom shows that instead of converting password to Password and deleting password it just adds password to the attributes of the object.

Here is my code:

JSON

When I use postman to call my web service I get the response:

{"type":null,"idTeacher":1,"name":"Sean","password":"tst","email":null,"dob":1392940800000}

Model:

window.Teacher = Backbone.Model.extend({
    urlRoot: "http://localhost:8080/SIMS/resource/teacher",
    defaults: {
          "id": null,
        "Name":  "",
        "Password":  "",
        "email":  "",
        "dob":  "",
        "type":  ""

      },

          parse: function(response){
              response.id = response.idTeacher;
              response.Password = response.password;
              response.Name = response.name;
              delete response.name;
              delete resoponse.password;
              delete response.idTeacher;
              return response;
          } 
});

window.TeacherCollection = Backbone.Collection.extend({
    model: Teacher,
    url: "http://localhost:8080/SIMS/resource/teacher",

        parse: function(response){

            return response;

        }

});

Main.js // This is

 before: function(callback) {
        if (this.teacherList) {
            if (callback) callback();
        } else {
            console.log('........................................javascript........');
            this.teacherList = new TeacherCollection();
            console.log('Loading List: Size: ' + this.teacherList.length);  
            this.teacherList.fetch({success: function() {
               console.log('........... ftech success...........');
               $('#contents').html( new TeacherListView({model: app.teacherList}).render().el );
               if (callback) callback();
            }});
        }
    }

If I debug my Backbone I can see that my parse did not parse any of the variable and the delete calls in the parse did not work either.

enter image description here

UDATE ANSWER

Thanks for the help. The fact that I hadn't the code in the collection class was an issue. But the second reason was that I wasn't looping through the collection to change each of the attributes.

Upvotes: 0

Views: 169

Answers (2)

Elad Levy
Elad Levy

Reputation: 301

That's because when you call the fetch method for your collection, the parse method that is called is the parse of the collection and not the parse of your teacher model. When you call the fetch method from the collection the collections expects to receive an array of models and not just one teacher as you described

Upvotes: 1

Rida BENHAMMANE
Rida BENHAMMANE

Reputation: 4129

You are defining your parse method in your Model but calling your Collection fetch method.

In this case, only the parse method of your Collection will be called.

Upvotes: 1

Related Questions