2015-11-02 2 views
0

Я использую автозаполнение JQuery UI для целого ряда текстовых полей моего проекта Backbone.js. Библиотеки загружаются в правильном порядке, как следует,

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 иногда работает безупречно. Тем не менее, иногда я получаю ошибку в консоли:
Uncaught TypeError:. $ (...) автозаполнения не является функцией

Обновление HTML обычно делает его работу еще раз, но потом, что это не то, что я хочу. Может ли кто-нибудь предложить мне, куда я иду?

+2

Похоже, пользовательский интерфейс библиотеки Jquery не загружается – epascarello

+0

Когда вы называете 'autocomplete'? В документе. Уже? Поскольку документ должен быть готов с полной загрузкой jQuery ui. –

+0

Да, «автозаполнение» вызывается в документе 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

Спасибо. Это помогло сохранить несколько часов моего дня. –

Смежные вопросы