2015-07-01 52 views
-1

這裏的主要問題是在什麼情況下調用require(arrayOfPaths,onSuccess,onError)導致onSuccess回調被一個對象調用,而不是模塊返回一個對象有兩種方法:attach和notNeeded? 第二個問題是,這些attach()和notNeeded()方法做了什麼?requirejs返回一個帶有attach和notNeeded方法的模塊

我找不到這些文件。

這種情況的再現非常簡單。我在一些使用require方法加載的Web服務器上有一個AMD模塊(TypeScript)。該調用第一次工作,可用於多個其他AMD模塊的多個需求調用。但是,如果我刷新頁面,該頁面使用我的邏輯再次進行require調用,它不會返回我的AMD模塊,而是返回上面描述的對象。

我的假設是,返回的對象是對象的緩存版本,如果我打電話給attach()它會給我緩存的對象。但我還沒有測試過。

下面是幾個將「緩存」想法拋出窗口的東西: 1.這是一個瀏覽器刷新(不是Ctrl + R樣式),但仍然是刷新,這意味着頁面已加載,任何腳本由於requirejs添加的標記應該消失 2.我要提供給require調用的路徑有一個?ts = where = new Date()。getTime()

所以,第一次調用的路徑和調用可以是:

require(["http://someurl/provider.js?ts=123"], onSuccess, onError); 

和在第二呼叫,它可能是:

require(["http://someurl/provider.js?ts=124"], onSuccess, onError); 
+0

你「無法找到任何有關這些文件」,因爲這不是RequireJS的事情。如果您想解決問題,請製作[mcve](http://stackoverflow.com/help/mcve)。 – Louis

+0

我會嘗試創建一個mcve,但這需要一些時間。我只能做這樣的事情。 你怎麼確定它不是RequireJS的東西?我描述的行爲/工件直接來自require調用。你能否詳細說明你的結論:它不是RequireJS的東西? – jgo

回答

0

好吧,我創建了一個小型的Web項目,試圖做同樣的事情,我正在做的,不能重現它。我認爲不值得我發佈不重現的代碼,但如果需要的話我可以發佈。

但我設法讓行爲消失。首先,我的web項目有一點背景:我的web項目是一個ASP.NET MVC 5 Web應用程序,它使用WrapBootstrap中的Angle主題。如果你不熟悉這個主題,它基本上會帶來一堆第三方庫,比如角度,引導,fontawesome,旋轉等等。 現在,其次,我搜索了我的整個源代碼根文件夾和子文件夾中的'notNeeded',並發現fastclick引用它,但不一定會創建具有notNeeded屬性的任何對象。 fastclick是Angle主題默認引入的庫之一。 fastclick是唯一一個提及notNeeded的人;從而排除requirejs。 最後,我嘗試從ui.router嘗試解決的模塊列表中刪除fastclick,並通過這樣做刪除了此行爲。我不想說這是答案,因爲我想確切地知道是什麼促成了這種行爲/神器。瀏覽器(IE)做到了嗎?當我多玩這個東西時,也許我可以在那裏得到可驗證的東西。