【问题标题】:Backbone.history.start() throws a TypeError when r.js -o is used使用 r.js -o 时 Backbone.history.start() 会抛出 TypeError
【发布时间】:2012-11-02 13:34:19
【问题描述】:

当我在我的 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

代码

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

【问题讨论】:

  • 我知道这对您没有帮助,但是使用您提供的代码对我来说效果很好:s
  • 干杯,那一定是我的电脑特有的东西。我会在另一台机器上试一试,看看会发生什么。
  • 我已经有了一些优化器的 WTF,如果我没记错的话,它是行尾的一个不可见字符。手动重新键入该行,修复之前的一行和修复后的一行。
  • 我有 sublime 可以去掉所有尾随空格,所以不应该有任何隐藏字符。我移动了一些线条,但没有快乐。我刚刚用优化文件的输出更新了问题。

标签: backbone.js requirejs r.js


【解决方案1】:

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

不确定这是否是正确的解决方法,但希望它能对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2011-10-03
    • 2016-11-18
    相关资源
    最近更新 更多