我可以使用knockout和requirejs应用程序AMD模块,here示例。实际上使用dojo工具包。
// Main viewmodel class
define(['knockout-x.y.z'], function(ko) {
return function appViewModel() {
this.firstName = ko.observable('Bert');
};
});
但是如何使用knockoutjs扩展 knockout-es5 这在AMD模块中不起作用。
答案 0 :(得分:1)
你是对的,knockout-es5不是兼容AMD的模块。但是,这并不能阻止您使用RequireJS正确使用它。您需要做的是在require配置中使用垫片(http://requirejs.org/docs/api.html#config-shim)。您需要这个的原因是因为您需要告诉要求插件依赖于Knockout,因此无法首先加载。
以下是您的require配置可能如下所示:
var require = {
paths: {
'ko': 'knockout.min',
'koES5': 'knockout-es5.min',
},
shim: {
'koES5': { deps: ['ko'] }
}
};
这将创建2个路径,一个路径为Knockout,另一个路径为Knockout-es5。在垫片我们告诉要求knockout-es5取决于淘汰赛。这可确保以正确的顺序进行加载。
现在你的RequireJS模块应该是:
define(['ko', 'koES5'], function(ko) {
return function appViewModel() {
this.firstName = ko.observable('Bert');
};
});
注意:从技术上讲,您不需要ko作为要求,因为koES5已经要求它加载,因为它被标记为依赖项。此外,您不需要koES5的变量,因为它不会返回您将使用的任何内容,您只需将其添加为确保文件加载的要求。