【问题标题】:RequireJS: How to define a constructor?RequireJS:如何定义构造函数?
【发布时间】:2013-06-26 10:48:32
【问题描述】:

我想根据 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 是未定义的。我做错了什么?

【问题讨论】:

    标签: javascript model-view-controller constructor requirejs


    【解决方案1】:

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

    您可以自己显式命名模块,但它会使模块 便携性较差——如果您将文件移动到另一个目录,您将 需要更改名称。通常最好避免在名称中编码 对于模块,只需让优化工具在模块中烧录 名字。

    尝试将categories.js 调整为:

    define(function() {
    
        return function CategoriesCtrl(layers) {
    
            // etc
    
        };
    });
    

    【讨论】:

    • 我也遇到过类似的问题,结果我只是忘记在构造函数前面加上“return”了。
    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2012-03-16
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多