2013-07-11 61 views
2

我正在使用backbone.js以及jquery和underscore.js。
错误说:
类型错误:CollectorCollection是不是构造
变种收藏家=新CollectorCollection();
RequireJs骨干错误集合在创建新集合时不是构造函数

这是我的index.html

<html><heade></head><body><script data-main="js/mainCollector" src="js/libs/require.js"></script></body> 

mainCollector.js

require.config({ 
    paths: { 
     html5shiv: "libs/html5shiv", 
     jquery: "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min", 
     jqueryui: "http://code.jquery.com/ui/1.10.3/jquery-ui", 
     tablesorter: "libs/jquery.tablesorter.min", 
     script: "script", 
     underscore: "libs/underscore.min", /*"http://underscorejs.org/underscore",*/ 
     backbone: "libs/backbone.min", /*"http://backbonejs.org/backbone-min",*/ 
     utils: "utils", 
     collectorModel: "models/collectorModel", 
     collectorCollection: "collectorCollection", 
     collectorRouter: "collectorRouter", 
     edit: "views/Collector/collector_edit", 
     index: "views/Collector/collector_index", 
     neww: "views/Collector/collector_new", 
     row: "views/Collector/collector_row", 
     show: "views/Collector/collector_show" 
    }, 
    shim: { 
     jqueryui: { 
      deps: ["jquery"], 
      exports: "Jqueryui" 
     }, 
     tablesorter: { 
      deps: ["jquery"], 
      exports: "TableSorter" 
     }, 
     script: { 
      deps: ["jquery"], 
      exports: "Script" 
     }, 
     underscore: { 
      exports: "_" 
     }, 
     backbone: { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     } 
    }  
});  
require(["backbone", "underscore", "collectorCollection", "collectorRouter"], 
    function (Backbone, _, CollectorCollection, CollectorRouter) { 
     var Collectors = new CollectorCollection(); 
     var router = new CollectorRouter({collectors: collectors}); 
     console.log("Start App"); 
     Backbone.history.start(); 
    }); 

colectorCollection.js

define("collection", [ 
     "underscore", 
     "backbone", 
     "collectorModel" 
    ], function(_, Backbone, CollectorModel) { 
     console.log("Collection loaded"); 
     var CollectorCollection = Backbone.Collection.extend({ 
      // Reference to this collection's model. 
      url: "api/index.php/Collectors", 
      model: CollectorModel 
     }); 
     return CollectorCollection; 
    }); 

collectorModel.js

define("model", ["underscore", "backbone"], function(_, Backbone){ 
    console.log("model loaded"); 

    var CollectorModel = Backbone.Model.extend({ 
     urlRoot: 'api/index.php/collectors', 
     // the root 
     paramRoot: "collector", 

     // the default fields 
     defaults: { 
      id: null, 
      name: "" 
     } 
    }); 
    return CollectorModel; 
}); 

谢谢。

回答

1
  • 在需要时(如果你做正确的事情,不要在全局命名空间编写JavaScript代码是区分大小写的
  • 在定义文件中使用的变量名是本地的定义,他们将无法使用),
  • define names你的模块,这可能会导致问题的道路

这意味着CollectorCollection将不可用全球,并在

require(["collectorCollection"], function (collectorCollection) { 
} 

您的收藏其实是以collectorCollection的形式提供的:请注意小写字母c。

所以,你需要尽可能

require(["backbone", "underscore", "collectorCollection", "collectorRouter"], 
    function (Backbone, _, CollectorCollection, CollectorRouter) { 
     var collectors = new CollectorCollection(); 
     var router = new CollectorRouter({collectors: collectors}); 
     console.log("Start App"); 
     Backbone.history.start(); 
    }); 

你已经在你的集合定义了类似的问题,呼叫可以写成:

define([ 
     "underscore", 
     "backbone", 
     "collectorModel" 
    ], function(_, Backbone, CollectorModel) { 
     console.log("Collection loaded"); 
     var CollectorCollection = Backbone.Collection.extend({ 
      // Reference to this collection's model. 
      url: "api/index.php/Collectors", 
      model: CollectorModel 
     }); 
     return CollectorCollection; 
}); 
+0

谢谢,我已经纠正的大写的失败,而不是原因。 – mstafkmx

+0

我只注意到你为你的模块定义了名字(你的第一个参数),这可能也是问题的一部分。我修改了集合的代码作为示例 – nikoshr

+0

@MustaphaKoumach在模块定义中删除名称有帮助吗? – nikoshr