如何在Backbone中使用RequireJs使用名称空间

时间:2012-07-08 09:12:26

标签: backbone.js namespaces requirejs

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

我已经想到了可能的样子,但我完全不确定这是否正确。

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 }
});

messages.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;
});

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

3 个答案:

答案 0 :(得分:5)

看看TODO Backbone + requireJs示例:

https://github.com/addyosmani/todomvc

答案 1 :(得分:1)

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

只需在接下来的几天测试

答案 2 :(得分: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.
    }
);

无论如何,也许在某些情况下仍然需要命名一些东西,但我认为一般来说,看看你是否需要reading the docs是值得的。