如何使用RequireJS与Knockout

时间:2015-11-13 19:16:06

标签: javascript jquery knockout.js 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"
}
};

前三条路径显然只是我用于我的应用程序的库。最后一个文件&#34; common&#34;是我的应用程序的全局函数集合,如打开主菜单,向用户发送消息或绑定处理程序等。

app.js

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

});

我知道requireJS总是需要一个数据主文件来运行。但是上面的代码到底做了什么?我试图在线学习教程,但没有帮助。我猜测通过在数组中定义这些字符串,它会在配置文件中查找并加载到这些文件中,但这些文件如何被访问或使用?我猜测我可以简单地只需要&#34;要求&#34;那些相同的字符串,我的功能可以使用它们吗?

common.js (针对Stack Overflow进行了简化)

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

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

});

通过将所有内容包装在require()中,我认为这是注入需要淘汰的依赖项。

应用的第一页 - login.html(简化为S.O。)
在应用的第一页中,我使用以下

定义<script>标记
require(["jquery", "knockout", "fastclick", "common"], function ($, ko, FastClick)
{
    $(function(){
        appViewModel.loginData = {
            email : ko.observable(),
            password : ko.observable()
        };
    });
 });

尝试运行时产生的错误是

Uncaught ReferenceError: appViewModel is not defined
尽管事实上我已经包含了#34;普通&#34;在要求([])。

我在这里缺少什么?我认为我可能完全误解了&#34;要求&#34;和&#34;定义&#34;在requireJS中做,这对我来说是一个很好的答案基础。

1 个答案:

答案 0 :(得分:1)

我想你想做那样的事情:

定义全局obj的模块

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

 });

模仿obj:

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

});