JS快速完成数据库数据显示

在写项目的过程中遇到问题时应该怎么做?

  - 搜现成模块

  - 上网查找模块的基本使用,找文档

  - 看源码

       - stackoverflow上查找

主要实现:增删改查组件(JS)

内容详情:

  服务器列表:两种方法

      - 获取数据,模板语言渲染

      - js获取数据,js动态创建table标签(采用)

        方法:通过ajax向从后端获得数据

        

<div class="container">
    <h1>服务器列表</h1>
    <table class="table table-bordered">
        <thead id="tHead">
            <tr></tr>
        </thead>
        <tbody id="tBody"></tbody>
    </table>
</div>

/*  向后端获取数据  */
function init() {
$.ajax({
url:requestUrl,
type:"GET",
data:{},
success:function (response) {
/* 处理表头 */
initTableHead(response.table_config);
        /*  处理显示内容 */
            initTableBody(response.data_list,response.table_config);

$('.loading').addClass('hide'); //当数据显示出来,隐藏加载图片
},
error:function () {
$('.loading').addClass('hide');
}
})
}
 

  功能:

      订制表头:function  initTableHead(table_config)

          

    //定制表头
    function initTableHead(table_config) {
        $('#tHead tr').empty();
        $.each(table_config,function (index,val) {
            var th = $("<th>");
            th.html(val.title);
            $('#tHead tr').append(th);
        })
    }

      订制显示内容:function initTableBody(table_config,data_list)

          - 知识点:1  字符串格式化

                 2  自定义规则 : @

    //定制表体
    function initTableBody(data_list,table_config) {
        $.each(data_list,function (k,row_dict) {
            var tr = $('<tr>');
            $.each(table_config,function (kk,vv) {
                var td = $('<td>');
                var format_dict = {};
                $.each(vv.text.kwargs,function (kkk,vvv) {
                    if (vvv[0] === '@'){
                        var name = vvv.substring(1,vvv.length);
                        format_dict[kkk] = row_dict[name]; // 自定义规则:以@开头的,去数据库中取数据.
                    }else {
                        format_dict[kkk] = vvv;
                    }
                });
                td.html(vv.text.tp1.format(format_dict)); // 字符串格式化后加到td标签中
                tr.append(td);
            });
            $('#tBody').append(tr);
        })
    }

      加载框:图片放到static中,配置静态文件,注意一般不使用STATIC_ROOT

        STATICFILES_DIRS = [
         os.path.join(BASE_DIR,'static'),
        ]
     
    <div class="loading">
        <div class="img"></div>
    </div>
<style>
.loading{
position: fixed;
top:0;
left:0;
right: 0;
bottom: 0;
background-color: black;
opacity: 0.4;
z-index: 1000; // 设置元素的堆叠顺序,值越大越在前面。
}
.loading .img{
height: 32px;
32px;
background: url("{% static 'images/loading.gif' %}");
position: fixed;
top:50%;
left: 50%;
margin-top: -16px;
margin-left: -16px;
z-index: 10001;
}
.hide{
display: none;
}
</style>
  用在什么地方?
    当从后端取数据比较慢时,在这期间可以加上加载的图片。当数据加载出来,就隐藏加载图片。

    

    前端JS整合:

      涉及的知识点:

        - 自执行函数【让我们定义的函数名不和其他的函数名冲突】

        

(function(args){
     alert(args)
})(666)

        - jQuery扩展【在函数内部可以执行程序】

$.extend({

      "xxxx": function(args){
           alert(args)
    }

})    


$.xxxx(6666)

        - js 中的作用域:首先在当前作用域找,再上层

  最后整合的信息快速显示的组件为:

  

(function (jq) {

    var requestUrl = '';

    String.prototype.format = function (args) {
        return this.replace(/{(w+)}/g, function (s, i) {
            return args[i];
        });
    };

    /*  向后端获取数据  */
    function init() {
        $.ajax({
            url:requestUrl,
            type:"GET",
            data:{},
            success:function (response) {
                /*  处理表头 */
                initTableHead(response.table_config);
                initTableBody(response.data_list,response.table_config);
                $('.loading').addClass('hide');
            },
            error:function () {
                $('.loading').addClass('hide');
            }
        })
    }

    //定制表头
    function initTableHead(table_config) {
        $('#tHead tr').empty();
        $.each(table_config,function (index,val) {
            var th = $("<th>");
            th.html(val.title);
            $('#tHead tr').append(th);
        })
    }

    //定制表体
    function initTableBody(data_list,table_config) {
        $.each(data_list,function (k,row_dict) {
            var tr = $('<tr>');
            $.each(table_config,function (kk,vv) {
                var td = $('<td>');
                var format_dict = {};
                $.each(vv.text.kwargs,function (kkk,vvv) {
                    if (vvv[0] === '@'){
                        var name = vvv.substring(1,vvv.length);
                        format_dict[kkk] = row_dict[name];
                    }else {
                        format_dict[kkk] = vvv;
                    }
                });
                td.html(vv.text.tp1.format(format_dict));
                tr.append(td);
            });
            $('#tBody').append(tr);
        })
    }

    // jquery 扩展
    jq.extend({
        'nBList':function (url) {
            requestUrl = url;
            init();
        }
    })

})(jQuery);

 HTML中简化为:

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.css' %}">
    <style>
        .loading{
            position: fixed;
            top:0;
            left:0;
            right: 0;
            bottom: 0;
            background-color: black;
            opacity: 0.4;
            z-index: 1000;
        }
        .loading .img{
            height: 32px;
            width: 32px;
            background: url("{% static 'images/loading.gif' %}");
            position: fixed;
            top:50%;
            left: 50%;
            margin-top: -16px;
            margin-left: -16px;
            z-index: 10001;
        }
        .hide{
            display: none;
        }
    </style>
</head>
<body>
<div class="loading">
    <div class="img"></div>
</div>

<div class="container">
    <h1>服务器列表</h1>
    <table class="table table-bordered">
        <thead id="tHead">
            <tr></tr>
        </thead>
        <tbody id="tBody"></tbody>
    </table>
</div>

<script src="{% static 'bootstrap/js/jquery-3.2.1.js' %}"></script>
<script src="{% static 'bootstrap/js/nb-list.js' %}"></script>
<script>

    $(function () {
        $.nBList('/server_json.html');
    })

</script>


</body>
</html>

      

原文地址:https://www.cnblogs.com/guomeina/p/7652366.html