我正在使用Knockout和Require。我在一个单独的模块中有一些Knockout处理程序,我想使用它。没有依赖于此模块的JavaScript代码,但它在HTML中的data-bind属性中使用。
我怎么知道要求每当添加淘汰的脚本时,它也应该添加这个模块并且它依赖于Knockout(它应该能够使用'ko')?
答案 0 :(得分:1)
如果我说得对,这只是“定义一个带有依赖关系的模块”,这是一个非常基本的requirejs事情。请查看requirejs api文档的"Definition Function with Dependencies"部分。
以下是文档中的示例:
//my/shirt.js now has some dependencies, a cart and inventory
//module in the same directory as shirt.js
define(["./cart", "./inventory"], function(cart, inventory) {
//return an object to define the "my/shirt" module.
return {
color: "blue",
size: "large",
addToCart: function() {
inventory.decrement(this);
cart.add(this);
}
}
}
);
所以你可以在你的淘汰赛处理程序中执行此操作,在那里你可以将你的淘汰依赖项传递给函数。然后在每个模块中你需要挖空,你将你的淘汰处理程序添加到define语句中的依赖项。如果你在模块中不需要它们但只在DOM内部,那么你不必将它们传递给函数参数。您可以将敲除处理程序添加到define依赖关系列表的末尾,而不添加如下所示的其他参数:
define(["knockout", "knockout-handlers"], function(knockout) {
//you're module using knockout,
//knockout-handlers will be available inside the dom
});
当我重新考虑我的答案时,我得出的结论是循环依赖不是问题。你可以使用shim配置来实现“自动依赖”:
//within your config
requirejs.config({
shim: {
'knockout': {
deps: ['knockout-handlers']
}
}
});
//your knockout handlers module definition
define(["knockout"], function(knockout) {
return {
//Your knockout-handler module
}
});
每次加载淘汰赛时都会加载你的淘汰赛。