zoukankan      html  css  js  c++  java
  • [Backbone] Parse not formatted JSON code

    The good Dr. recently had another team implement the server and they slightly messed up the format of the JSON returned for Appointment data. Instead of returning JSON like { "title": "Ms. Kitty Hairball Treatment", "cancelled": false, "id": 1 } the server is returning JSON like { "appointment": { "title": "Ms. Kitty Hairball Treatment", "cankelled": false, "identifier": 1 }

    Add to the parse function below code to handle return the JSON without the "appointment" as root.

    var Appointment = Backbone.Model.extend({
      parse: function(response){
        return response.appointment;
      }
    });

    Great! Now let's take care of that pesky spelling error.

    Change 'cankelled' to 'cancelled' and make sure to remove the 'cankelled' property.

    Make sure to refer to the JSON below and to the right.

    var Appointment = Backbone.Model.extend({
      parse: function(response){
        response = response.appointment;
        response.cancelled = response.cankelled;
        delete response.cankelled;
        return response;
      }
    });

    update the Appointment model to use the"identifier" string as the idAttribute instead of the default "id", that way you can call appointment.idlater on. 

    var Appointment = Backbone.Model.extend({
      idAttribute: 'identifier',
      parse: function(response){
        var appointment = response.appointment;
        appointment.cancelled = appointment.cankelled;
        delete appointment.cankelled;
        return appointment;
      }
    });

    In the Appointment instantiation code below, make sure the attributes get run through our new parse function by passing in the appropriate option to the Appointment constructor

    var appointment = new Appointment(data, {parse: true}); //Forse to pasre the data

    He just tried to create a new Appointment and it crashed the server because the JSON sent up to represent the Appointment was in the wrong format. Update toJSON below to return the JSON the server expects. (Make sure you don't modify the model.attributes object)

    var Appointment = Backbone.Model.extend({
      toJSON: function(){
        var attrs = _.clone(this.attributes);
        attrs.cankelled = attrs.cancelled;
        delete attrs.cancelled;
        return { appointment: attrs};
      }
    });

    Now that we've modified toJSON to return mangled JSON, we need to change our AppointmentView to useattributes instead of toJSON.

    var AppointmentView = Backbone.View.extend({
      template: _.template('<span>' +
                            '<%= title %></span>' +
                            '<a href="#">x</a>'),
    
      render: function(){
        this.$el.html(this.template(this.model.attributes));
      }
    });
  • 相关阅读:
    [LeetCode] 382. Linked List Random Node 链表随机节点
    [LeetCode] 384. Shuffle an Array 数组洗牌
    [LeetCode] 489. Robot Room Cleaner 扫地机器人
    [LeetCode] 465. Optimal Account Balancing 最优账户平衡
    [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
    百度地图Api进阶教程-创建标注和自定义标注3.html
    百度地图Api进阶教程-默认控件和自定义控件2.html
    百度地图Api进阶教程-基础地图示例1.html
    IS支持解析json
    C# 字典 Dictionary 遍历
  • 原文地址:https://www.cnblogs.com/Answer1215/p/3897524.html
Copyright © 2011-2022 走看看