2015-11-02 155 views
0

我在我的Backbone.js项目上的很多文本字段中使用了JQuery UI自动完成功能。该库以正确的顺序加载如下,

define(['jquery','jquery-ui.min','jquery.ui.touch-punch']); 

自动完成功能被调用,就像这样:

$("#channelRspm").autocomplete({ 
minLength: 3, 
delay: 1000, 
source: function(request, response) { 
var results = $.ui.autocomplete.filter(channel, request.term); 
response(results.slice(0, 10)); 
    } 
}); 

的问题是自动完成的行为是很随意的。在Chrome浏览器上运行源代码时,它有时可以完美运行。但是,有时我得到的错误控制台:
遗漏的类型错误:$(...)自动完成不是一个函数

刷新HTML通常使得一遍,但随后的工作,这不是我想要的。任何人都可以请建议我要去哪里工作?

+2

听起来像了jQuery UI库没有加载 – epascarello

+0

当你调用'autocomplete'?在document.ready中?因为该文档应该准备好jQuery ui完全加载。 –

+0

是的,'autocomplete'在document.ready()中被调用。加载源json数组并在源代码中调用自动完成,都发生在document.ready()内部。 –

回答

0

您应该确定后面加载shim

require.config({ 
    paths: { 
    "jquery": "lib/jquery", 
    "jquery-ui": "lib/jquery-ui", 
    "underscore": "lib/underscore", 
    "backbone": "lib/backbone" 
    }, 
    shim: { 
    "underscore": { 
     exports: "_" 
    }, 
    "backbone": { 
     exports: "Backbone", 
     deps: ["underscore", "jquery"] 
    }, 
    "jquery-ui": { 
     exports: "$", 
     deps: ['jquery'] 
    } 
    } 
}); 

您需要在类似的方式来指定jquery-ui为依赖于jquery.ui.touch-punch

然后定义你的模块状

define(['jquery','jquery-ui','jquery.ui.touch-punch']); 
+1

谢谢。这有助于节省我一天的几个小时。 –

相关问题