2015-11-13 112 views
0

我的设置至今:如何使用RequireJS与淘汰赛

<script src="/common/js/require.configure.js"></script> 
<script src="/common/js/lib/require.js" data-main="/common/js/app.js"></script> 

require.configure.js

var require = { 
baseUrl: '/', 
paths: { 
    "jquery": "/common/js/lib/jquery", 
    "fastclick": "/common/js/lib/fastclick", 
    "knockout": "/common/js/lib/knockout", 
    "common": "/common/js/scripts/common" 
} 
}; 

前三名的路径显然只是我使用我的应用程序库。最后文件“通用”是通用于我的应用程序,例如打开主菜单,给出的信息给用户,或结合处理功能的集合,等

app.js

define(["jquery", "knockout", "fastclick", "common"], function(){ 

}); 

我知道requireJS总是需要最初运行的数据主文件。但是,上面的代码实际上做了什么?我试图在线上学习教程,但它并没有帮助。我猜测,通过在数组中定义这些字符串,它会在配置文件中查找它并加载到这些文件中,但是如何访问或使用这些文件?我猜我可以简单地“要求”那些相同的字符串,他们会在我的功能中提供给我?

common.js(简化堆栈溢出)

require(["knockout"], function (ko) { 

var appViewModel = {}; 
appViewModel.loaded = ko.observable(false); 

}); 

通过在需要包装的一切()我认为这是需要注射淘汰赛的依赖关系。

应用程序的第一页 - login.html的(简化SO)
在应用程序中的第一页,我想,当定义一个<script>标签有以下

require(["jquery", "knockout", "fastclick", "common"], function ($, ko, FastClick) 
{ 
    $(function(){ 
     appViewModel.loginData = { 
      email : ko.observable(), 
      password : ko.observable() 
     }; 
    }); 
}); 

而产生的误差运行的是

Uncaught ReferenceError: appViewModel is not defined 

尽管我已在要求([])列入“共同”。

我在这里错过了什么?我认为我可能完全误解了requireJS中的“要求”和“定义”,因此这将成为我答案的良好基础。

+0

的''' 'appViewModel''''不在相同的范围内。 –

回答

1

我想你想要做这样的事情:

模块定义全局OBJ

require(["knockout"], function (ko) { 
    window.appViewModel = {}; 
    window.appViewModel.loaded = ko.observable(false); 

}); 

Modulw是popule与obj:

require(["jquery", "knockout", "fastclick", "common"], function ($, ko, FastClick) 
{ 
    window.appViewModel.loginData = { 
    email : ko.observable(), 
    password : ko.observable() 

});