【问题标题】:Qlik How to import JS Libraries that are Depended of ether otherQlik 如何导入依赖于其他以太的 JS 库
【发布时间】:2020-04-01 13:55:26
【问题描述】:

我正在构建一个自定义扩展并且需要 Chartjs 这样做。

我有以下导入

define( [
        'jquery',
        './PropertiesPannel',
        '//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.js',
        '//cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js',
        '//cdn.jsdelivr.net/npm/chartjs-plugin-zoom@0.7.5/dist/chartjs-plugin-zoom.min.js'
    ],
    function ( $, ProperitesPannel, Chart) {
        'use strict';
....

我收到以下控制台错误。

hammerjs.js:1 Uncaught SyntaxError: Unexpected token '<'
3setup-view.d91ae8b7669a979d2ec1.js:8 TypeError: Cannot read property 'helpers' of undefined
    at chartjs-plugin-zoom.min.js:11
    at Object.execCb (setup-view.d91ae8b7669a979d2ec1.js:8)
    at n.check (setup-view.d91ae8b7669a979d2ec1.js:8)
    at n.<anonymous> (setup-view.d91ae8b7669a979d2ec1.js:8)
    at setup-view.d91ae8b7669a979d2ec1.js:8
    at setup-view.d91ae8b7669a979d2ec1.js:8
    at each (setup-view.d91ae8b7669a979d2ec1.js:8)
    at n.emit (setup-view.d91ae8b7669a979d2ec1.js:8)
    at n.check (setup-view.d91ae8b7669a979d2ec1.js:8)
    at n.enable (setup-view.d91ae8b7669a979d2ec1.js:8)

我了解 chartjs 插件文件需要图表文件和锤子。我怎样才能把这些联系起来?

【问题讨论】:

    标签: javascript requirejs qlikview qliksense


    【解决方案1】:

    这是一个安静的问题... chartjs 插件尝试加载 chart.js 这不是有效的模块 ID,而是文件名。因此,即使我在 require.config.paths 中设置它,RequireJS 也会尝试将其加载为文件......所以这里有一个小解决方法:

    <script src=https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.js></script>
    <script>
        require.config({
            paths: {
                jquery: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min',
                'chart': '//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle',
                hammerjs: '//cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min'
            }
        });
    
        var originalDefine = define;
    
        window.define = function (a, b, c) {
            // when chartjs-plugin-zoom.min.js tries to load chart.js, load the chart module from the defined paths :)
            if (a && a.length && a[0] === 'chart.js') {
                a[0] = 'chart';
            }
            originalDefine(a, b, c);
        };
    
        require([
            'jquery',
            'chart',
            'hammerjs',
            '//cdn.jsdelivr.net/npm/chartjs-plugin-zoom@0.7.5/dist/chartjs-plugin-zoom.min.js'
        ], function ($, chart, hammer, chartjs) {
            'use strict';
            console.log('hello world');
            console.log($, chart, hammer, chartjs);
        });
    </script>
    

    它加载正常,所以你很高兴

    【讨论】:

    • 好方法,我最终使用了未修改的源代码,因此所有内容都添加到原型中,而不是需要 Chartjs。可能不是最佳实践,但它是我用例的合适解决方法!
    猜你喜欢
    • 2019-12-13
    • 2020-12-08
    • 2011-08-15
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2012-06-21
    相关资源
    最近更新 更多