【问题标题】:Knockout custom bootstrap binding error with RequireJS使用 RequireJS 敲除自定义引导绑定错误
【发布时间】:2016-03-24 07:03:08
【问题描述】:

我有一个用于引导工具提示的自定义敲除绑定,有时页面加载正常,有时我在绑定中抛出此错误。

$(...).tooltip 不是函数

我在发生这种情况的部分设置了一个断点,有时 jquery 对象上没有任何引导函数。我只能假设这是由 require 加载引导库的时间问题。就像我说的那样,它不会每次都发生,而且当我打开开发工具控制台时,它似乎会更频繁地发生。

这是我的需求配置

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);
});

【问题讨论】:

  • 您在applyBindings 周围是否有类似的定义块?您要确保所有内容都已加载。
  • @RoyJ 我编辑了我的问题。我在应用绑定之前加载引导程序。
  • 您是否检查过element 是一个DOM 元素,并且不为空或未定义?

标签: javascript jquery twitter-bootstrap knockout.js requirejs


【解决方案1】:

将您的customBindings 添加到调用ko.applyBindings 的模块中的依赖项列表中

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

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2016-11-16
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多