【问题标题】:How to load Heyoffline.js with Require.js如何使用 Require.js 加载 Heyoffline.js
【发布时间】:2013-01-01 14:23:01
【问题描述】:

我正在尝试使用 require.js 加载 Heyoffline 我试过垫片配置

require.config({
    paths : {
        heyoffline  : "libs/heyoffline"
    },
    shim: {
        'heyoffline': {
            exports: 'Heyoffline'
        }
    }
});

在一个模块文件中。

define(["heyoffline"], function (Heyoffline) {
  new Heyoffline;
}

其他部门正在加载没有问题。

我只得到以下异常:

Uncaught TypeError: undefined is not a function 

【问题讨论】:

  • 该错误是从哪一行报告的?

标签: javascript requirejs js-amd


【解决方案1】:

Heyoffline 不是 AMD 模块。我认为问题在于require.js 正在等待Heyoffline 被加载。在这种情况下,它在 global scope AND window scope 上定义。 exports 属性首先找到 global 值,但在您的 define 中,您需要 window 值,该值尚未加载。

两种可能的解决方案(未经测试,因为我没有使用 Heyoffline):

1) 适应 Heyoffline

尝试使用以下内容更改 heyoffline.js。将window.Heyoffline 更改为window.Heyoffline2(在文件末尾):

return window.Heyoffline2 = new Heyoffline; 

相应地更改您的垫片:

shim: {
        'heyoffline': {
            exports: 'Heyoffline2'
        }
    }

2) 使用 domReady 插件

您可以尝试的另一种可能性是使用插件domReady。还要从函数中删除Heyoffline 参数,并使用window.Heyoffline 确保使用正确的对象:

define(["domReady!heyoffline"], function () {
  new window.Heyoffline;
}

【讨论】:

  • 这对我来说似乎不是一个很好的解决方案
  • Heyoffline 不兼容 AMD。首先,您需要知道我所描述的是否是问题的原因。最简单的方法是我建议的。如果解决了,你可以联系 Heyoffline 的创建者。
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
相关资源
最近更新 更多