4

У меня есть обязательная привязка нокаута для всплывающих подсказок и несколько раз, когда страница загружается нормально, а несколько раз я получаю эту ошибку, возникающую в привязке.Ошибка нокаута при загрузке бутстрапа с RequireJS

$ (...). Подсказке не является функцией

я поставил точку останова в секции, где это происходит, а иногда объект JQuery не имеет каких-либо функций начальной загрузки на Это. Я могу только предположить, что это проблема с временем загрузки загрузочной библиотеки по требованию. Как я уже сказал, это происходит не каждый раз, и, похоже, это происходит гораздо чаще, когда у меня открыта консоль разработчиков.

Вот мой требуется CONFIG

requirejs.config({ 
    waitSeconds: 200, 
    shim: { 
     "bootstrap": { 
      deps: ['jquery'], 
      exports: "$.fn.tooltip" 
     } 
    }, 
    enforceDefine: true, 
    paths: { 
     jquery: 'jquery-1.11.3.min', 
     bootstrap: 'bootstrap.min', 
     moment: 'moment.min', 
     knockout: 'knockout.min', 
     appVM: 'appVM', 
     custombindings: 'custombindings' 
    } 
}); 

И моего связывание

define(['knockout', 'jquery', 'bootstrap'], function (ko, $, bootstrap) { 
    ko.bindingHandlers.tooltip = { 
     init: function (element, valueAccessor) { 
      var local = ko.utils.unwrapObservable(valueAccessor()), 
       options = {}; 

      ko.utils.extend(options, ko.bindingHandlers.tooltip.options); 
      ko.utils.extend(options, local); 

      $(element).tooltip(options); //Error thrown here 

      ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
       $(element).tooltip("destroy"); 
      }); 
     }, 
     options: { 
      'container': 'body', 
      'delay': { 'show': 1000, 'hide': 100 }, 
      'animation': 'true' 
     } 
    }; 
}); 

Моих применять привязки

define(['jquery', 'bootstrap', 'appVM', 'knockout', 'domReady!'], 
    function(jquery, bootstrap, appVM, ko) { 
    var vm = new appVM(); 
    ko.applyBindings(vm); 
}); 
+0

У вас есть подобный блок определения, где вы «применяетеBindings»? Вы хотите быть уверенным, что все загружено. –

+0

@RoyJ Я отредактировал мой вопрос. Я загружаю бутстрап перед применением привязок. – Tbonebrad

+0

Вы проверили, что 'element' является элементом DOM, а не null или undefined? –

ответ

4

Добавить customBindings в зависимости списка в модуле, который вызывает ko.applyBindings

define(['jquery', 'bootstrap', 'appVM', 'knockout', 'customBindings', 'domReady!'], 
    function(jquery, bootstrap, appVM, ko) { 
    var vm = new appVM(); 
    ko.applyBindings(vm); 
});