在AMD模块中使用knockout es5插件

时间:2014-03-01 11:52:14

标签: javascript jquery knockout.js dojo

我可以使用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模块中不起作用。

1 个答案:

答案 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的变量,因为它不会返回您将使用的任何内容,您只需将其添加为确保文件加载的要求。