2015-11-13 116 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() 

});