1

我正在尝试将 Kendo 与 requirejs 和私有 jquery 一起使用。

此处记录了私有 jquery 提示,使用 requirejs 的 Kendo 位于此处

我的requirejs配置:

require.config({
    paths: {
        "jquery": "js/jquery-2.0.3.min.js",
        "k": "js/kendo/2013.2.716"
    },
    map: {
        "*": {
            "jquery": "jquery-private",
        },
        "jquery-private": { "jquery": "jquery" },
    }
});
define("jquery-private", ["jquery"], function (jq) {
    return jq.noConflict(true);
});

然后当我require(["jquery", "k/kendo.dropdown.min"], function(){...}),我有错误。

我认为 Kendo 无法使用私人 jquery。有没有办法让它与私人 jquery 一起工作?只需要一些垫片配置吗?

谢谢。

4

1 回答 1

-1

这是一个纯粹的猜测,因为我什至不知道剑道是什么,但我相信你的问题源于这些问题:

//This require statement is not correct.
require(["jquery", "k/kendo.dropdown.min"], function(){...})

您没有将 jQuery 绑定到任何变量,因此如果您稍后尝试使用它,它就不存在了。你可能想要这样的东西。

require(["jquery", "k/kendo.dropdown.min"], function($){

另一个问题是 kendo 插件可能假定全局 jQuery。这意味着您必须确保插件正确声明并绑定其依赖项局部变量。插件代码应该被包装成这样的东西:

define([
    'jquery',
  ],
  function (jQuery) {
    //In case it also depends on the $ then set it up here too:
    var $ = jQuery;
    /* The actual kendo plugin stuff...*/
  }
);

这是因为调用 noConflict 意味着全局 $ 和 jQuery 变量未绑定。你必须明确指定要绑定到 jQuery 的局部变量,否则它将不起作用。大多数插件都希望定义 jQuery 变量,但它也可以假定为 $。

PS 即使插件启用了 AMD 并在其中有一个定义子句,插件也可能需要一些修改才能与私有 jQuery 一起使用。似乎有些插件不使用依赖项绑定到的局部变量,并在定义声明中传递给插件。相反,他们使用公开定义或未公开定义的任何内容(例如骨干网)。所以他们使用define 子句只是为了说明什么是依赖关系并确保requriejs 加载某种形式的jQuery,但他们实际上并不费心使用它们。然而,jQuery 并非如此。

于 2013-11-18T09:00:09.823 回答