当使用r.js -o时,Backbone.history.start()会抛出TypeError

时间:2012-11-02 13:34:19

标签: backbone.js requirejs r.js

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

Uncaught TypeError: undefined is not a function

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

我删除了一些代码,直到找到导致它的原因,似乎是在我调用Backbone.history.start();时。

我已经创建了一个简单的应用程序来复制该错误,我在下面发布了这个错误。基本上,它创建了一个路由和'console.log'的'home'。没有优化时它工作正常。

为了优化应用,我使用:

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

代码

的index.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>

site.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

1 个答案:

答案 0 :(得分:0)

我内联jQuery,它似乎现在正常工作。 (它在API shim docs on requirejs.org的底部提到,但不在Optimize部分的任何位置。)

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