2

当我在我的 Backbone.js 应用程序上运行 r.js 优化器时,我收到此错误:

Uncaught TypeError: undefined is not a function

它出现在输出的 Backbone.js 部分的中间。

我删除了一些代码,直到我发现导致它的原因,并且似乎是当我调用Backbone.history.start();.

我创建了一个简单的应用程序来复制我在下面发布的错误。基本上,它创建了一个路由和“console.log”的“家”。未优化时它工作正常。

为了优化应用程序,我使用:

node r.js -o app.build.js

从 /js 文件夹。

我有 Backbone.js 0.9.2、RequireJS 2.1.1、r.js 2.1.1

有没有人遇到过这个?我对 Backbone.js/RequireJS 还是很陌生,所以希望这只是我做错了一些愚蠢的事情。

文件夹结构

/js
  /libs
    - backbone.js
    - require.js
    - underscore.js
  - app.build.js
  - r.js
  - site.js
index.html

代码

索引.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

    <script data-main="/js/site.js" src="/js/libs/require.js"></script>

</body>
</html>

网站.js

requirejs.config({
    baseUrl     : 'js/',
    paths       : {
        jquery          : '//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min',
        backbone        : 'libs/backbone',
        underscore      : 'libs/underscore'
    },
    shim        : {
        backbone        : {
            deps            : ['underscore', 'jquery'],
            exports         : 'Backbone'
        },
        underscore      : {
            exports         : '_'
        }
    }
});

require(['jquery', 'backbone'], function($, Backbone) {

    var Router = Backbone.Router.extend({
            routes      : {
                ''          : 'home'
            },
            home        : function(){
                console.log('home');
            }
        }),
        appRouter;

    $(function() {

        appRouter = new Router();
        Backbone.history.start();

    });

});

app.build.js

({
    baseUrl: ".",
    name: 'site',
    paths: {
        jquery: 'empty:',
        underscore: 'libs/underscore',
        backbone: 'libs/backbone'
    },
    out: 'site-built.js',
    shim        : {
        backbone        : {
            deps            : ['underscore', 'jquery'],
            exports         : 'Backbone'
        },
        underscore      : {
            exports         : '_'
        }
    }
})

谢谢!

更新

这是 site-built.js 的输出。任何人都可以看出它有什么明显的问题吗?

http://pastebin.com/Rbm7J83X

4

1 回答 1

0

我内联了 jQuery,它现在似乎可以正常工作了。(它在 requirejs.org 上的 API shim 文档底部提到,但在 Optimize 部分的任何地方都没有提到。)

不确定这是否是正确的修复,但希望它会帮助其他人。

于 2012-11-12T09:04:39.573 回答