2015-07-01 50 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)做到了吗?当我多玩这个东西时,也许我可以在那里得到可验证的东西。