JsGrid将嵌套对象加载到表中 [英] JsGrid loading nested object into table

查看:119
本文介绍了JsGrid将嵌套对象加载到表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Django中开发一个Web项目并使用jsGrid.我遇到问题,找不到解决方法.

I am developing a web project in Django and using jsGrid. I encountered a problem and couldn't find a solution.

我有一个嵌套的JSON数据,它是通过组合多个数据库表记录创建的.这是我的JSON:

I have a nested JSON data which is created by combinating multiple DB table records. Here is my JSON :

{  
   "count":3,
   "results":[  
      {  
         "personnel":{  
            "name":"david",
            "age":34
         },
         "company":"IBM"
      },
      {  
         "personnel":{  
            "name":"john",
            "age":28
         },
         "company":"Google"
      },
      {  
         "personnel":{  
            "name":"Yuri",
            "age":42
         },
         "company":"Microsoft"
      }
   ]
}

这是我的js脚本:

function () {
    $("#personnelsgrid").jsGrid({
        height: "500px",
        width: "100%",
        filtering: !0,
        editing: !0,
        sorting: !0,
        paging: !0,
        autoload: !0,
        pageSize: 15,
        pageButtonCount: 5,
        deleteConfirm: "Do you really want to delete the client?",
        controller: {
            loadData: function (filter) {
                return $.ajax({
                    type: "GET",
                    url: "/get_personnels",
                    dataType: "json",
                    data: filter
                });
            }
        },
        fields: [
            {name: "personnel.name", type: "text", width: 50},
            {name: "personnel.age", type: "number", width: 50, filtering: false},
            {name: "company", type: "text", width: 200},
        ]

可以看到,我的数据中有一个嵌套的对象.尽管JSON来自服务器,但未将其加载到jsGrid表中.我该怎么办?

As it is seen, I have a nested objects in my data. Although the JSON comes from the server, it is not loaded in jsGrid table. What should I do?

推荐答案

在您的响应中,json数据以response.results格式出现.因此,在您的 loadData 方法中,您需要使用 $.Deferred() 像这样

As in your response json data is coming in format of response.results. So, in your loadData method you need to pass your results using $.Deferred() like this

loadData: function(filter) {
     var deferred = $.Deferred();
     $.ajax({
         type: "GET",
         url: "/get_personnels",
         dataType: "json",
         data: filter,
         success: function(response) {
             deferred.resolve(response.results);
         }
     });
     return deferred.promise();
 }

演示

$("#jsGrid").jsGrid({
    width: "100%",
    height: "auto",
    filtering: !0,
    editing: !0,
    sorting: !0,
    paging: !0,

    //for loadData method Need to set auto load true
    autoload: true,
    pageSize: 15,
    pageButtonCount: 5,
    deleteConfirm: "Do you really want to delete the client?",

    noDataContent: "Directory is empty",

    controller: {
        loadData: function(filter) {
            var deferred = $.Deferred();
            $.ajax({
                type: "get",
                url: "//api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=jsgrid&site=stackoverflow",
                dataType: "json",
                success: function(response) {
                    deferred.resolve(response.items);
                }
            });
            return deferred.promise();
        }
    },

    fields: [{
        name: "owner.display_name",
        title: 'Name',
        type: "text",
        width: 50
    }, {
        name: "title",
        title: 'Title',
        type: "text",
        width: 200
    }]
});

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" />

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" />

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>

<div id="jsGrid"></div>

这篇关于JsGrid将嵌套对象加载到表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆