RequireJS:如何定义构造函数?

时间:2013-06-28 15:37:02

标签: javascript model-view-controller constructor requirejs

我想根据AMD规范创建构造函数。我找到this answer并试图遵循它。这就是我最终的结果:

main.js

requirejs.config({

    paths: {
        'jquery': 'vendor/jquery-1.9.1.min',
        'lodash': 'vendor/lodash-1.3.1.min',
        'knockout': 'vendor/knockout-2.2.1.min',
        'bootstrap': 'vendor/bootstrap-2.3.2.min'
    }
});

requirejs(
    ['jquery', 'lodash', 'knockout', 'controller/categories'], 
    function main($,_,ko, CategoriesCtrl) {

        var categories = new CategoriesCtrl();

    }
);

控制器/ categories.js

define('categories', function() {

    return function CategoriesCtrl(layers) {

        var self = this;
        layers = layers || [];

        console.log(ko);

    };
});

我得到的结果是CategoriesCtrl未定义。我做错了什么?

1 个答案:

答案 0 :(得分:6)

您通过向define 'categories'提出第一个参数来创建a named AMD module。最好尽可能避免这种情况:

  

您可以自己明确命名模块,但它会生成模块   不太便携 - 如果您将文件移动到另一个目录,您将   需要更改名称。通常最好避免使用名称进行编码   对于模块,只需让优化工具在模块中刻录   名。

尝试将categories.js调整为:

define(function() {

    return function CategoriesCtrl(layers) {

        // etc

    };
});