【问题标题】:How do I use namespaces in Backbone with RequireJs如何通过 RequireJs 在 Backbone 中使用命名空间
【发布时间】:2012-07-08 09:12:25
【问题描述】:

我不确定如何在模块化 (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 }
});

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

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

【问题讨论】:

    标签: backbone.js namespaces requirejs


    【解决方案1】:

    看看 TODO Backbone + requireJs 的例子:

    https://github.com/addyosmani/todomvc

    【讨论】:

    • 嗨,我查看了代码。这就是我目前使用 RequireJs 的方式,但我错过了命名空间(总是有另一个变量没有“全局”变量)
    • 链接不再有效:​​(知道在哪里检索该资源吗?
    • 糟糕的答案,提供真实的内容——不仅仅是外部链接
    • 这是一个简单的 RequireJS 用户,所有的命名空间都是本地的。问题是关于如何共享全局命名空间...
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我是主干新手,但只是从 requirejs 文档中阅读了一个 sn-p。

      模块与传统脚本文件的不同之处在于它定义了一个范围良好的对象,以避免污染全局命名空间。它可以显式列出其依赖项并获取这些依赖项的句柄,而无需引用全局对象,而是将依赖项作为定义模块的函数的参数接收。 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 看看你是否需要。

      【讨论】:

        猜你喜欢
        • 2013-11-16
        • 2013-12-13
        • 2012-12-15
        • 2012-11-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 2019-03-26
        • 1970-01-01
        相关资源
        最近更新 更多