【问题标题】:Unable to load javascript library with requirejs无法使用 requirejs 加载 javascript 库
【发布时间】:2013-03-08 23:22:46
【问题描述】:

无论超时设置如何,我都会不断收到以下错误:

Uncaught ReferenceError: ko is not defined knockout.activity.js:381 未捕获的错误:模块的加载超时:淘汰赛 http://requirejs.org/docs/errors.html#timeout

var require = {
    baseUrl: "/app1/script",

    paths: {
        jquery: "lib/jquery/jquery-1.8.3",
        knockout: "lib/knockout/knockout-2.2.0",
        activity: "lib/knockout/knockout.activity"
    },

    shim: {
        "activity": {
            deps: [
                "jquery",
                "knockout"
            ],
            exports: "ko"
        } 
    }
};

在我的视图模型中:

define([
    "jquery",
    "knockout",
    "activity",
],

function ($, ko) {

【问题讨论】:

  • 你试过没有baseUrl吗?我相信你还需要在视图函数中为activity 提供一个“参数”,而不是 100% 确定

标签: javascript requirejs


【解决方案1】:

将活动导出为 jQuery.fn.activity。

如果您查看 knockout.activity.js 的源代码,它期望 ko 被定义为 KnockoutJS 对象。但是你通过将 knockout.activity.js 定义为 ko 打破了这一点。

看看这个:http://requirejs.org/docs/api.html#config-shim

【讨论】:

  • 所以,导出:“jQuery.fn.activity”?
  • 您确定路径正确吗?使用 WebKit 开发人员工具中的网络选项卡来验证您是否通过正确的路径获取脚本。 BaseUrl 也适用于 jQuery 和 knockout。
  • 所有脚本都是根据网络选项卡加载的,但它仍然说 ko 未定义(即使加载了敲除库)。 ko 存在于 window.ko,但不存在于 this.ko...
  • 为什么需要使用this.ko? Knockout 被定义为一个全局对象,应该这样使用。
  • 是的,你是对的,我只需要将它从回调签名中删除
【解决方案2】:

在您的要求中将名称从 knockout 更改为 ko

define([
    "jquery",
    "ko",
    "activity",
],

function ($, ko) {

ko 是根命名空间而不是“淘汰”。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2014-10-26
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多