zoukankan      html  css  js  c++  java
  • Flask + Echarts 前端代码 如何进行拆分

    Flask + Echarts 前端代码 如何进行拆分

    1. 遇到的问题

    写Echarts前端代码太长了,为什么css和js代码都要放在html文件里,怎么拆开来?

    2. 直接拆行吗

    先直接把js独立出来

    /static/js/myEcharts.js

    let height = '600px'
    let width = '945px'
    
    let divEles = document.getElementsByTagName('div')
    for (let i = 0; i < divEles.length; i++) {
        divEles[i].style.height = height
        divEles[i].style.width = width
    }
    
    let myEcharts1 = echarts.init(document.getElementById('div1'))
    let myEcharts2 = echarts.init(document.getElementById('div2'))
    
    // jinja2
    echartsData = {{ data | safe }}
    

    这还用说?直接报错

    jinja2等后端模板引擎只能在html中用,js是不认识的。(除非使用一些前端渲染模板)

    3. 思考一下

    为什么要使用jinja2模板?

    向前端传数据

    前端不能自己拿数据吗?

    可以,用js向后端发起一个请求就行

    4. 用jq发起一个Ajax请求

    4.1 定义接口

    在发请求前先定义一个接口

    @charts.route('/echartsData')
    def get_echarts_data():
        option1 = get_option1()
        option5_guangdong, option5_jiangsu, option5_shandong = get_option5()
        option9_x, option9_d = get_option9()
        option11_d1, option11_d2 = get_option11()
    
        echarts_data = {
            'option1': option1,
            'option5_guangdong': option5_guangdong,
            'option5_jiangsu': option5_jiangsu,
            'option5_shandong': option5_shandong,
            'option9_x': option9_x,
            'option9_d': option9_d,
            'option11_d1': option11_d1,
            'option11_d2': option11_d2
        }
    
        return echarts_data
    

    4.2 get请求

    $.get('/echartsData', function (data) {
            let echartsData = data;
    });
    

    可是这样请求并不会发送,因为没有调用。

    可以使用$(document).ready(function()等待doc加载完毕后自动调用

    $(document).ready(function () {
        $.get('/echartsData', function (data) {
            let echartsData = data;
        })
    })
    

    但是这样的话,因为是异步请求,变量echartsData是不能在全局中使用的,之后的所有用到echartsData的代码都要卸载这个函数中

    $(document).ready(function () {
        $.get('/echartsData', function (data) {
            let echartsData = data;
            
            option1 = {
    			......
            };
            
            option2 = {
                ......
            };
            
            myEcharts1.setOption(option1);
            myEcharts2.setOption(option2);
        });
    });
    

    4.3 禁止异步

    感觉函数太长了,难看,怎么禁止异步呢?

    其实上面Ajax请求的代码是简写模式,完整的Ajax请求应该是这样写的:

    let echartsData;
    
    $.ajax({
        url: '/echartsData',
        async: false,
        success: function (data) {
            echartsData = data
        }
    });
    

    关于参数async,官网的解释是这样的:

    async (default: true)

    Type: Boolean

    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false.

    意思默认值是true发起异步请求,设置为false禁止异步。

    这样一来,就可以禁止异步请求,把数据赋值给全局变量了,拆分工作完成!


    参考

  • 相关阅读:
    xmap使用实例
    事务使用
    JQuery常用一些语法
    ORA01461: can bind a LONG value only for insert into a LONG column,不是中文长度问题,是ojdbc驱动
    如何配置,页面自动跳转?
    FFmpeg(四) 像素转换相关函数理解
    模板
    初级算法题记录(一)
    C# String.Format 指定字符串宽度和对齐方式
    ImageMagick 批量图片格式转换
  • 原文地址:https://www.cnblogs.com/pineapple-py/p/14613484.html
Copyright © 2011-2022 走看看