有问题使用Require.js正确加载文件

时间:2013-01-11 18:38:41

标签: javascript requirejs

问题的一些背景信息

所以我去年为一个客户编写了一个应用程序,在项目的大约一半时间我意识到我需要有很多异步功能,所以我开始将大量的网站功能转移到javascript上。 I ran into a fairly major issue with my dev environment并最终在我的php文件中包含了大量的javascript以节省时间。

在将项目交给客户之前,我将所有的javascript移动到单独的文件中,只是由网站的不同区域分开。所以我最终得到了一个admin.js,checkout.js,common.js等等。

实际问题

客户现在想要为网站添加更多功能,我想继续将javascript正确地构建到不同的文件中,并将模型代码与视图代码分开。

我想使用requirejs,所以我没有在每个页面的页脚中进行一堆脚本调用,也更好地处理依赖项。

我遇到的具体问题是它似乎没有正确加载我的文件。

我的main.js文件

require.config({
  paths: {
    'course'    : 'models/course',
    'login_view': 'views/login/login_view',
    'config'    : 'config',
    'views'     : 'views/views',
    'session'   : 'models/session'
  }
});

require(['login_view'], function(login_view){
  login_view.init();
});

我的login_view.js文件

define(function() {
  var login_view = {
    init: function(){
      console.log(this);
    });
  };
});

当我在我的开发服务器上加载应用程序时,我收到此错误Uncaught TypeError: Cannot call method 'init' of undefined

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

因为模块必须公开一个需要模块可以操作的接口(替换变量名称以避免命名混淆):

//login_view.js
define(function() {
  var opBoard = {
    init: function(){
      console.log('I am initted!');
    });
  };

  //expose opBoard containing init
  return opBoard;
});

//so if i required in require or depended in another module
require(['login_view'],function(lv){
  //lv is the exposed opBoard from the `login_view` module
  lv.init();
});