2015-11-06 2 views
-1

У меня есть основной плагин JQuery определен как например:Использование машинописный Bloodhound внутри плагин JQuery

(function($){ 
    var new_row_num = 0; 

    // Test data for now 
    var courses = [ 
     { 
      course_num: "M118", 
      title: "Finite Math" 
     }, 
     { 
      course_num: "M119", 
      title: "Calculus" 
     }   
    ]; 

    // constructs the suggestion engine 
    var courseSuggestions = new Bloodhound({ 
     datumTokenizer: Bloodhound.tokenizers.obj.whitespace('course_num'), 
     queryTokenizer: Bloodhound.tokenizers.whitespace, 
     local: courses 
    });  

    var methods = { 
     init : function(options) { 

     }, 
     add : function() { 
      // Adds a new row to my table 
     } 
    }; 

    $.fn.studentCourseBox = function(methodOrOptions) { 
     if (methods[methodOrOptions]) { 
      return methods[ methodOrOptions ].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof methodOrOptions === 'object' || ! methodOrOptions) { 
      // Default to "init" 
      return methods.init.apply(this, arguments); 
     } else { 
      $.error('Method ' + methodOrOptions + ' does not exist on jQuery.studentCourseBox'); 
     }  
    }; 
})(jQuery); 

Идея заключается в том, что каждый раз, когда я добавить новую строку, используя этот плагин:

$('#myWidget').studentCourseBox('add'),

он автоматически инициализирует поле Typeahead в одном из столбцов. К сожалению, я получаю ошибку Javascript «ReferenceError: Bloodhound не определен» при первой ссылке на Bloodhound.

Однако, если я перемещаю инициализацию переменных для courses и courseSuggestions вне плагина и передаю их через метод init, он работает нормально. Итак, я знаю, что Bloodhound работает в моем скрипте, он просто не работает внутри моего плагина.

Что я делаю неправильно? Я чувствую, что это проблема, но я пробовал $.Bloodhound, $.fn.Bloodhound и т. Д., И ничего не работает.

ответ

0

У меня был Javascript с неправильным заказом. У меня был ресурс JS для Bloodhound загружен после этот код, поэтому мой браузер, должно быть, пытался создать экземпляр courseSuggestions до того, как был определен Bloodhound. Не уверен, почему это сработало при создании экземпляра вне плагина.