问题的一些背景信息
所以我去年为一个客户编写了一个应用程序,在项目的大约一半时间我意识到我需要有很多异步功能,所以我开始将大量的网站功能转移到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
任何帮助都将不胜感激。
答案 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();
});