使用require.js的一个Backbone.js应用依赖于另一个:如何包含孩子?

时间:2012-11-21 18:46:04

标签: backbone.js requirejs commonjs

我写了一个使用require.js的backbone.js应用程序,并使用models /,collections /等分解。然后我写了另一个应用程序,它取决于第一个应用程序(以及其他一些东西。文件的布局如下:

/scripts/appA/
             models/
             collections/
             views/
/scripts/appNeedsA/
             models/
             collections/
             views/

我需要什么才能要求appA?以下似乎合乎逻辑,但不起作用。如果我使用../../appA,那就找到了appA,但由于root是错误的,因此无法找到IT的依赖项。

define(
  ['underscore', 'backbone', '../appA'],
  function (_, Backbone, appA) {
     ...
  }

2 个答案:

答案 0 :(得分:2)

这可能不是你希望的答案,但是,这是一种方法:

https://github.com/busticated/RequireLoadingExample

我们的想法是使用消费应用程序将使用的路径定义您的模块deps,然后在消费的应用程序中适当地别名路径。

在我的示例中,我有一个顶级的main.js文件,该文件同时包含app1.js和app2.js模块。这两个模块都依赖于它们自己的子目录中的模块 - 例如app1.js使用一个/ mods / a.js和一个/ mods / b.js。我有另一个main(main-one.js)文件,它位于一个/目录中。该文件调用:

require.config({
    paths: {
        'jquery': 'libs/jquery',
        'one': '.'
    }
});

所以现在当app1.js加载时,一个/ mods / a.js路径被转换为./mods/a.js并被发现/加载而没有问题。

您应该能够将我的仓库分叉并加载index.html&在js控制台打开的浏览器中打开one.html以查看它是否全部工作。

希望它有所帮助!

答案 1 :(得分:0)

正确的解决方案是:

define(
  ['underscore', 'backbone', 'appA/views/whatever'],
  function (_, Backbone, appAWhateverView) {
     ...
 }

并将require.config路径设置为包括:

require.config({
    paths: {
         appA: '../appA'
    }
});