Javascript 使用RequireJS自动加载依赖模块
我正在使用击倒和要求。我想在一个单独的模块中使用一些淘汰处理程序。没有依赖于此模块的JavaScript代码,但它用于HTML中的数据绑定属性Javascript 使用RequireJS自动加载依赖模块,javascript,knockout.js,requirejs,Javascript,Knockout.js,Requirejs,我正在使用击倒和要求。我想在一个单独的模块中使用一些淘汰处理程序。没有依赖于此模块的JavaScript代码,但它用于HTML中的数据绑定属性 我怎样才能告诉Require,无论何时添加敲除脚本,它也应该添加这个模块,并且它依赖于敲除(它应该能够使用'ko')?如果我理解正确,这只是关于“定义具有依赖性的模块”,这是一个非常基本的requirejs内容。看看RequireJSAPI文档的一部分 以下是文档中的示例: //my/shirt.js now has some dependencies,
我怎样才能告诉Require,无论何时添加敲除脚本,它也应该添加这个模块,并且它依赖于敲除(它应该能够使用'ko')?如果我理解正确,这只是关于“定义具有依赖性的模块”,这是一个非常基本的requirejs内容。看看RequireJSAPI文档的一部分 以下是文档中的示例:
//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(["knockout", "knockout-handlers"], function(knockout) {
//you're module using knockout,
//knockout-handlers will be available inside the dom
});
当我重新思考我的答案时,我得出结论,循环依赖在这里不是问题。您可以为“自动依赖项”使用垫片配置:
每次加载击出时,都应该加载击出处理程序。我尝试了这个,基本上是有效的。但我在代码中没有使用“库存”模块。因此,添加依赖项是不对的。如果我添加更多的模块。。。在这一点上,我坚持这个,直到我找到一个更好的方法。。。谢谢…我想问题在于你的循环依赖性。如果knockout处理程序不依赖knockout,则可以“误用”shim配置来向knockout添加“静态”依赖项。但这并没有起作用,因为击出依赖于击出处理程序,而击出处理程序依赖于击出-这是一件坏事。好吧,我还有一个想法:你可以(错误地)使用垫片配置来实现这一点。我会在几分钟后将此添加到我的答案中。刚刚意识到,即使是Knockout本身也使用此方法:请参阅上一个示例,我在几乎每个backbone.js项目中都使用此方法,并在一些开发人员中看到了它,因此我认为它没有任何问题。无论如何,我在我的答案中加入了垫片法。
//within your config
requirejs.config({
shim: {
'knockout': {
deps: ['knockout-handlers']
}
}
});
//your knockout handlers module definition
define(["knockout"], function(knockout) {
return {
//Your knockout-handler module
}
});