TypeError:$(…)。typeahead不是RequireJS的函数

我正在使用RequireJS来加载我的依赖项。

这是我的配置文件:

requirejs.config({ baseUrl: "/js/dist", paths: { jquery: "../bower_components/jquery/dist/jquery.min", bootstrap: "../bower_components/bootstrap/dist/js/bootstrap.min", typeahead: "../bower_components/bootstrap3-typeahead/bootstrap3-typeahead.min", validator: "../bower_components/bootstrapvalidator/dist/js/bootstrapValidator.min", openlayers: "../vendor/openlayers/OpenLayers" }, shim: { bootstrap: { deps: ["jquery"] }, validator: { deps: ["bootstrap"] }, openlayers: { exports: "OpenLayers" } } }); 

我的主要应用程序文件的一部分:

 define(["jquery", "bootstrap", "openlayers", "./popup", "typeahead"], function($, Bootstrap, OpenLayers, Popup) { (...) $("#textSearch").typeahead("destroy"); (...) }); 

使用Firebug进行检查,我可以看到所有依赖项都已加载。 但是在我的搜索文本框上调用typeahead()输出以下消息: "TypeError: $(...).typeahead is not a function"

我无法弄清楚这个错误,因为所有依赖项(typeahead都是如此)都被加载了。

你能帮助我吗 ? 提前致谢

你使用的是什么版本的typeahead?

如果是0.11.1

由于模块定义不正确,当前版本的typeahead(版本0.11.1)与requirejs不兼容,请参见此处: https : //github.com/twitter/typeahead.js/issues/1211

来自RequireJS 文档 :

用于模块名称的路径不应包含扩展名,因为路径映射可以用于目录。 将模块名称映射到路径时,路径映射代码将自动添加.js扩展名。

在更新库之前的临时解决方法是更改​​库设置AMD兼容性的位置。

应省略文件扩展名,否则requireJS会将路径视为绝对路径。

更改:

 define("typeahead.js", [ "jquery" ], function(a0) { 

至:

 define("typeahead", [ "jquery" ], function(a0) { 

希望图书馆很快就会更新,同时希望这会有所帮助。

如果使用bootstrap3-typeahead而不是key typeahead ,该怎么办? 请参阅https://github.com/bassjobsen/Bootstrap-3-Typeahead/issues/106