我不确定如何在模块化(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;
});
这是正确的方法,还是我完全错误的方式(如果是,请纠正我!)
答案 0 :(得分:5)
看看TODO Backbone + requireJs示例:
答案 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是值得的。