Kendo + RequireJS +私有jquery无法正常工作

时间:2013-09-02 11:49:35

标签: jquery kendo-ui requirejs

我正在尝试使用带有requirejs和私有jquery的Kendo。

私有jquery提示记录为here,使用requirejs的Kendo为here

我的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一起工作?是否只需要一些垫片配置?

感谢。

1 个答案:

答案 0 :(得分:-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变量,但它也可以假设为$。

P.S。即使插件是启用了AMD并且其中有一个define子句,插件也可能需要一些修改才能使用私有jQuery。似乎有些插件不使用绑定依赖项的局部变量,而是传递给define声明中的插件。相反,他们使用的是公开定义的任何内容(例如主干)。所以他们使用define子句只是为了说明什么是依赖关系,并确保requriejs加载某种形式的jQuery,但他们实际上并不打算使用它们。然而,这不是jQuery的情况。