【问题标题】:Using JustGage with Require.js将 JustGage 与 Require.js 一起使用
【发布时间】:2015-05-04 21:29:36
【问题描述】:

JustGage 使用 Raphael,正如 here 所讨论的那样,它不符合 AMD 标准(因此不适用于 Require.js)。

我之前没有使用过 Require.js,也没有做过很多 JS,所以我正在努力解决这个问题。有很多试验和错误;)

使用建议的 here 方法,我将 Raphael 模块拆分为单独的文件并分别包含它们,并猜测要为 JustGage 做什么。

require.config({
    paths: {
        //other links removed
        'eve': 'vendor/eve/eve',
        'raphael-core': 'vendor/raphael/raphael.core',
        'raphael-svg': 'vendor/raphael/raphael.svg',
        'raphael-vml': 'vendor/raphael/raphael.vml',
        'raphael': 'vendor/raphael/raphael.amd',
        'justgage': 'vendor/justgage/justgage.1.0.1.min'
    },
    shim: {
        'eve': {
            exports: "eve"
        },
        'raphael': {
            deps: ['eve'],
            exports: "Raphael"
        },
        'justgage': {
            deps: ['raphael'],
            exports: "JustGage"
        }
    }
});

但是说明然后说“在上述配置之后,您可以像其他 require-js 模块一样开始使用 Raphael”,这不是很有帮助;)

我想我需要在 main.js 中做点什么?

在我的cshtml页面中

require(["raphael", "justgage"], function(JustGage) {
    $(function() {
        var a = new JustGage({
            id: "pvgauge",
            value: @Model.GaugeValues.PV,
            min: @Model.PVGauge.MinValue,
            max: @Model.PVGauge.MaxValue,
            title: "Personal Volume",
            label: "PV",
            levelColors: gaugeSettings.levelColors,
            levelColorsGradient: gaugeSettings.levelColorsGradient,
            showInnerShadow: gaugeSettings.showInnerShadow,
            shadowSize: gaugeSettings.shadowSize,
            labelFontColor: '#7ACE30',
            titleFontColor: gaugeSettings.titleFontColor,
            valueFontColor: gaugeSettings.valueFontColor
        });
    });
});

现在这至少找到 JustGage,但现在给出错误 'Raphael' is undefined.

(我也试过直接在cshtml文件中包含一个脚本,但得到错误'Mismatched anonymous define() module: function (eve) {')

Require.js 意味着事物不在全局范围内,我的理解是否正确? JustGage 是否希望 Raphael 进入全球范围?

对让 JustGage 工作有什么帮助吗?或者对适用于 Require.js 的“speedo”类型仪表的等效库的建议?

【问题讨论】:

    标签: javascript requirejs raphael justgage


    【解决方案1】:

    差不多了,您还需要将它添加到函数中,以便 JustGage 可以使用它。

    require(["raphael", "justgage"], function(raphael,JustGage) {
    

    如果 justgauge 是一个模块,那么您应该在模块中加载依赖项,因为它会在该模块中查找 raphael,但是由于您已经加载了它,它应该可以工作,

    更容易跟踪您的依赖项并在需要的地方加载它们,

    define(['module' , "pathto/raphael"], function (module, raphael) {
    

    【讨论】:

    • require(["raphael", "justgage" ], function (raphael, JustGage) { 或 require(["raphael", "justgage" ], function (Raphael, JustGage) { 都不起作用 - 仍然提供 Raphael is undefined。
    • 我对“如果 justgauge 是一个模块,那么你应该在模块中加载依赖项”的了解不够,对我来说很有意义,抱歉!不过,感谢答案。
    • 嗯,我可以调用 raphael 很好,但不能用 justgauge 做任何事情,因为如果这是一个词,它不是 amd-fied,运行这个 codepen.io/sajrashid/pen/eNppov,如果可行,很容易将 JUstgauge 包装到一个模块中(这确实意味着它会玩得很好),我逃脱了超过 50%,无论如何尝试一下,然后看看
    【解决方案2】:

    这对我有用:

    require('eve');
    window.Raphael = require('raphael');
    require('justgage');
    

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2012-09-13
      相关资源
      最近更新 更多