当前位置 博文首页 > wuch:python工业互联网应用实战18—前后端分离模式之jquery vs

    wuch:python工业互联网应用实战18—前后端分离模式之jquery vs

    作者:wuch 时间:2021-06-10 18:30

      前面我们分三章来说明了使用django template与jquery的差别,通过jquery如何来实现前后端的分离,同时再9章节使用vue.js 我们浅尝辄止的介绍了JQueryvue的切换,由于监控界面没有数据提交,无法很好的体现处我说的vue的优势,所以笔者增加本章节来进一步的对比两者异同点(没有对比就没有伤害),读者可以通过代码去体会vue的优势。vue作为精简版本的MVVM,完成双向绑定后我们编程的时候可以更专注于model本身,而不像JQuery还需要知道DOM元素的标签去读写值。两者都是前端脚本框架,实际项目中,有些时候我们会混合使用两者的。

    1.1. 重构模板tasks.html

      说干就干,我们通过重构tasks.html模板切换到vue模式下来理解和对比两者的差异吧,MVVM要点之一:MVVM 将数据双向绑定(data-binding)作为核心思想,View Model 之间没有联系,它们通过 ViewModel 这个桥梁进行交互。

    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title>任务列表</title>
        <link href="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
         <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    </head>
    <body>
        <div id="content-main" class="container">
        <div><a href='0/change/'>新增</a></div>
    
        {% csrf_token %}
            <table id="id_task_table">
                <tr>
                    <th>ID</th>
                    <th>任务号</th>
                    <th>源地址</th>
                    <th>目标地址</th>
                    <th>条码</th>
                    <th>状态</th>
                    <th>优先级</th>
                    <th>开始时间</th>
                    <th>结束时间</th>
                    <th>作业数量</th>
                    <th>操作</th>
                </tr>
                <tr v-for="task in taskList">  <!---->
                    <td>[[task.TaskId]]</td>
                    <td><a :href="task.TaskId + '/view/'">[[task.TaskNum]]</a></td>
                    <td>[[task.Source]]</td>
                    <td>[[task.Target]]</td>
                    <td>[[task.Barcode]]</td>
                    <td>[[task.State]]</td>
                    <td>[[task.Priority]]</td>
                    <td>[[task.BeginDate]]</td>
                    <td>[[task.EndDate]]</td>
                    <td>[[task.SystemDate]]</td>
                    <td>[[task.JobCount]]</td>
                    <td>[[task.JobCount]]</td>
                    <td><a :id="task.TaskId+'-decompose'" :href="task.TaskId+'/decompose/'">分解</a> <a :id="task.TaskId+'-start'" :href="task.TaskId+'/start/'">下达</a> <a :id="task.TaskId+'-change'" :href="task.TaskId+'/change/'">修改</a> <a :id="task.TaskId+'-delete'" href='#' @click="taskDel(task.TaskId)">删除</a></td>
                </tr>
            </table>
        </div>
    <script>
    
        var vm = new Vue({
            el: '#content-main',
            data: {
                taskList: [],
            },
            delimiters: ['[[', ']]'], 
            mounted() {
                this.getData()
            },
            methods: {
                getData: function () {
                    _this = this
                    //本例使用ajax实现vue的异步请求
                    $.ajax({
                        url: "/task/taskGetList/", success: function (result) {
                            d = result
                            _this.taskList = d.rows    //
                            
                            //for (const task of d.rows) {
                            //    var row = "";
                            //    row += "<tr>";
                            //    row += "<td>" + task.TaskId + "</td>";
                            //    row += "<td><a href='" + task.TaskId + "/view/'>" + task.TaskNum + "</a></td>";//①
                            //    row += "<td>" + task.Source + "</td>";
                            //    row += "<td>" + task.Target + "</td>";
                            //    row += "<td>" + task.Barcode + "</td>";
                            //    row += "<td>" + task.State + "</td>";
                            //    row += "<td>" + task.Priority + "</td>";
                            //    row += "<td>" + (task.BeginDate ? task.BeginDate : '-') + "</td>";
                            //    row += "<td>" + (task.EndDate ? task.EndDate : '-') + "</td>";
                            //    row += "<td>" + task.SystemDate + "</td>";
                            //    row += "<td>" + task.JobCount + "</td>";
                            //    row += "<td><a id='" + task.TaskId + "-decompose' href='" + task.TaskId + "/decompose/'>分解</a> <a id='" + task.TaskId + "-start' href='" + task.TaskId + "/start/'>下达</a>"
                            //        + (task.State == '未处理' ? " <a id='" + task.TaskId + "-change' href='" + task.TaskId + "/change/'>修改</a>" : "")
                            //        + " <a id='" + task.TaskId + "-delete' href='#' onclick=taskDel(" + task.TaskId + ")>删除</a></td>";  //②
                            //    row += "</tr>";
                            //    $("#id_task_table tbody").append(row);
    
                            //}
                        }
                    });
                },
                taskDel: function (pk) {
                    //异步从后台获得值
                    url_str = "/task/taskDel/"
                    data = {
                        pk: pk,
                        csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val()
                    }
                    $.ajax({
                        type: 'POST', url: url_str, data: data, success: function (result) {
                            //alert('HEHE')
                            window.location.replace("
    
    下一篇:没有了