未捕获的错误:匿名的define()模块不匹配:函数定义(名称,全局)

时间:2014-05-22 00:35:49

标签: javascript backbone.js requirejs

我在加载主干的requirejs文件时遇到了这个错误。我尝试加载r.js,requirejs优化器,但我仍然坚持使用它。

Uncaught Error: Mismatched anonymous define() module: function definition(name, global){

"use strict";

var PubSub = {
        name: 'PubSubJS',
        version: '1.3.1-dev'

以下是我的js:

define([
'jquery',
'underscore',
'backbone'
],function(){
subAccountRouter = Backbone.Router.extend({
  routes: {
  // Defining the routes
    'sub-accounts': 'subAccountList',
    '*actions': 'defaultAction'
  },
});

似乎已经对requirejs define()调用函数进行了一些更改,不知何故无法弄清楚它。有没有人有想法?

EDIT :::

以下是router.js文件。

    define([
       'jquery',
       'underscore',
       'backbone'
      ],function($, _, Backbone){
          SubAccountRouter = Backbone.Router.extend({
              routes: {
               'sub-accounts': 'subAccountList',
               '*actions': 'defaultAction'
              },


           initialize: function () {
              this.appContainer = $("#subaccount");
    //collections and models
              this.subAccountCollection = null;
            this.subAccountModel = null;
          },

      subAccountList: function(){
        var self = this;
        },
     defaultAction: function(){
        this.subAccountList();
      },
      });

    return {
       initialize: function() {
           Backbone.history.start();

          }
        };
     }); //main func

我在这做错了什么? 我检查我的路径,他们似乎是正确的,我仍然不明白为什么这个问题仍然困扰着我.. :( 我尝试更改路径的路径,并将参数传递给function($, _, Backbone)(如下面的sol' n中所示)。但是我似乎仍然看到错误。有没有人有任何其他想法???

2 个答案:

答案 0 :(得分:16)

<强>更新

检查文档后 - 实际上是the first error they discuss

“如果您在HTML中手动编写脚本标记以加载带有匿名define()调用的脚本,则可能会发生此错误。”

因此,请确保index.html中唯一的<script>标记(至少对于任何调用define()的脚本)是requirejs。

END UPDATE

您需要将参数传递给function(),如下所示:

define([
'jquery',
'underscore',
'backbone'
],function(jquery, underscore, backbone){
subAccountRouter = Backbone.Router.extend({
  routes: {
  // Defining the routes
    'sub-accounts': 'subAccountList',
    '*actions': 'defaultAction'
  },
});

我最近写了super-simple post on setting up requirejs,如果你仍然被卡住了。

答案 1 :(得分:3)

根据文档,require.js可能会爆炸,如果:

  • 您有一个匿名定义(&#34;调用define()的模块没有 字符串ID&#34;)在它自己的脚本标签中(我假设它们的意思是 全球范围内的任何地方)。
  • 您的模块名称相互冲突。
  • 您使用加载程序插件或匿名模块但不使用 require.js优化程序捆绑它们。

我在使用browserify和require.js模块一起构建的包时遇到了这个问题。解决方案是:

一个。在加载non-require.js之前加载require.js独立包在脚本标记中,或

B中。使用require.js(而不是脚本标记)加载它们。