我正在尝试使用带有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一起工作?是否只需要一些垫片配置?
感谢。
答案 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的情况。