无法初始化通过requireJS加载的对象

时间:2013-07-16 04:39:17

标签: javascript requirejs

当我尝试初始化在不同文件中声明/定义的对象时(但我相信它是通过requireJS加载的),它给了我ReferenceError: myTemplates is not defined。我有两个文件:main.jstemplates.js

main.js中(我想从templates.js加载对象并初始化它,

define(["jquery-ui", "templates"], function () {

  var templates = new myTemplates();     // gives ReferenceError
  alert( "Never reached this call" + $().jquery);

  $(document).ready(function() {
    alert( "Never reached this call " + $().jquery);
  });

});

templates.js中,只有一个名为myTemplates的对象,其函数名为test,如下所示

define(["jquery-ui"], function () {
  alert( "This alert is raised, proving that jQuery/jQuery UI is loaded in templates.js " + $().jquery);

  function myTemplates(){
    this.test = function(){
      alert('test');
      return false;
    };
  };
});

对于名为requireconfig.js的requireJS的配置文件,我有

requirejs.config({
  "baseUrl": "scripts/lib",
  "paths": {
    "app": "../app",
    "jquery" : [
        "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min", 
        "jquery-1.10.2.min"],
    "jquery-ui" : [
        "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min",
        "jquery-ui-1.10.3.min"],
    "templates" : "../app/templates/templates"
  },

  shim: {
    "jquery-ui": {
       exports: "$",
       deps: ["jquery"]},
  }
});
requirejs(["app/main", "templates"]);

我很确定在templates.js中正确加载了jQuery和jQuery用户界面,但我无法理解为什么ReferenceError在{{1}中初始化myTemplates }}。有谁可以看看,帮助我。谢谢。

P.S。如果有人想要查看文件夹/文件层次结构,请Github upload of the files/folders is here

1 个答案:

答案 0 :(得分:1)

好的,有两个问题

templates.js中,一旦定义了对象或函数,就必须将其返回

function myTemplates(){ ... };
return myTemplates;

main.js中,您必须为这些已定义的对象提供引用名称,除非它们不是AMD或在shim config中定义。

define(["jquery-ui", "templates"], function ($ui, myTemplates)

试一试!