5

我不确定如何在模块化(RequireJs)主干环境中使用命名空间。

我已经想过它会是什么样子,但我完全不确定这是否是正确的方法

app.js(由 main.js 执行)

define('App', ['underscore', 'backbone', 'Router'], function( _, Backbone, Router){
    function initialize(){
        var app = {}; // app is the global namespace variable, every module exists in app

        app.router = new Router(); // router gets registered

        Backbone.history.start();
    }

    return { initialize: initialize }
});

消息.js

define('MessageModel', ['underscore', 'backbone', 'App'], function(_, Backbone, App){
    App.Message.Model; // registering the Message namespace with the Model class

    App.Message.Model = Backbone.Model.extend({
        // the backbone stuff
    });

    return App;
});

这是正确的方法还是我完全走错了路(如果是,请纠正我!)

4

3 回答 3

5

查看 TODO Backbone + requireJs 示例:

https://github.com/addyosmani/todomvc

于 2012-07-08T09:16:48.787 回答
1

使用开头文章中提到的命名空间找到了一个真实的示例应用程序:https ://github.com/nrabinowitz/gapvis

只需要在接下来的几天里测试它

于 2012-07-08T12:35:55.010 回答
1

我是骨干新手,但只是从 requirejs 文档中阅读了一个片段。

模块与传统脚本文件的不同之处在于它定义了一个范围良好的对象,以避免污染全局命名空间。它可以显式列出其依赖项并获取这些依赖项的句柄,而无需引用全局对象,而是将依赖项作为定义模块的函数的参数接收。RequireJS 中的模块是模块模式的扩展,其好处是不需要全局变量来引用其他模块。

对我来说,这听起来好像在使用 requirejs 时,你可以忘记所有关于命名空间的事情,因为 requirejs 会处理它。您将只能以不同的方式访问它。当您想从另一个模块访问它时,您可以将文件的路径放在依赖项数组中,并将相应的变量提供给以下函数。

define(["folder/a-script", "folder/another-script"], function(AScript, AnotherScript) {
        // In here the scripts are loaded and can be used, but are called by
        // their relative name in the anonymous function.
    }
);

无论如何,也许在某些情况下仍然需要命名某些东西,但我认为总的来说,值得阅读文档以查看是否需要。

于 2013-08-14T22:18:16.327 回答