2015-11-02 154 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

謝謝。這有助於節省我一天的幾個小時。 –

相關問題