Javascript 使用RequireJS自动加载依赖模块

Javascript 使用RequireJS自动加载依赖模块,javascript,knockout.js,requirejs,Javascript,Knockout.js,Requirejs,我正在使用击倒和要求。我想在一个单独的模块中使用一些淘汰处理程序。没有依赖于此模块的JavaScript代码,但它用于HTML中的数据绑定属性 我怎样才能告诉Require,无论何时添加敲除脚本,它也应该添加这个模块,并且它依赖于敲除(它应该能够使用'ko')?如果我理解正确,这只是关于“定义具有依赖性的模块”,这是一个非常基本的requirejs内容。看看RequireJSAPI文档的一部分 以下是文档中的示例: //my/shirt.js now has some dependencies,

我正在使用击倒和要求。我想在一个单独的模块中使用一些淘汰处理程序。没有依赖于此模块的JavaScript代码,但它用于HTML中的数据绑定属性


我怎样才能告诉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
        }
});