Как исправить ошибку; ' Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)'



Я использую Bootstrap V4 и в консоли регистрируется следующая ошибка;




ошибка: всплывающие подсказки Bootstrap требуют привязки
(http://github.hubspot.com/tether/)




Я попытался удалить ошибку, установив Tether, но это не сработало. Я "установил" трос, включив следующие строки кода;



<link rel="stylesheet" href="http://www.atlasestateagents.co.uk/css/tether.min.css">
<script src="http://www.atlasestateagents.co.uk/javascript/tether.min.js"></script>


У меня "установленные" привязать правильно?



может кто-нибудь помочь мне удалить это ошибка?



Если вы хотите просмотреть ошибки на моем сайте, пожалуйста нажмите кнопку здесь и загрузите консоль.

943   23  

23 ответов:

для Bootstrap 4 stable:

поскольку бета-версия Bootstrap 4 не зависит от троса, но Поппер.js. Все скрипты (должно быть в этом порядке):

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>

посмотреть текущие документация для самых новых версий скрипта.


только Bootstrap 4 Альфа:

Bootstrap 4 Альфа должен трос, так что вам нужно включить tether.min.jsдо включить bootstrap.min.js, например.

<script src="https://npmcdn.com/[email protected]/dist/js/tether.min.js"></script>
<script src="https://npmcdn.com/[email protected]/dist/js/bootstrap.min.js"></script>

Если вы используете Webpack:

  1. настройка загрузчика bootstrap, как описано в docs;
  2. установить троса.js через npm;
  3. добавить фал.js к webpack ProvidePlugin плагин.

webpack.конфиг.js:

plugins: [
        <... your plugins here>,
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery",
            "window.jQuery": "jquery",
            "window.Tether": 'tether'
        })
    ]

источник

Если вы используете npm и browserify:

// es6 imports
import tether from 'tether';
global.Tether = tether;

// require
global.Tether = require('tether');

лично я использую небольшое подмножество функций Bootstrap и не нужно прикреплять трос.

Это должно помочь:

window.Tether = function () {
  throw new Error('Your Bootstrap may actually need Tether.');
};

вы должны сделать мои рекомендации:
1. Добавить ниже источник в Gemfile

source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '>= 1.1.0'
end
  1. выполнить команду:

    bundle install

  2. добавить эту строку после jQuery в приложении.js.

    / / = require jquery
    //= требуется привязь

  3. перезапустить сервер rails.

установить трос через НПМ, как показано ниже

npm install tether --save-dev

затем добавьте tether в свой html выше bootstrap, как показано ниже

<script src="node_modules/tether/dist/js/tether.min.js"></script>
<script src="jspm_packages/github/twbs/[email protected]/js/bootstrap.js"></script>

Если вы хотите избежать сообщения об ошибке, и вы не используете подсказки Bootstrap, вы можете определить окно.Троса до загрузки Бутстрап.

<script>
  window.Tether = {};
</script>
<script src="js/bootstrap.min.js"></script>

для webpack я решил это с помощью (webpack.конфиг.js):

new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            "window.jQuery": "jquery",
            Tether: 'tether'
        })

дополнительно. Если вы проверите несжатый файл javascript, вы найдете условие:

if(window.Tether === undefined) {
     throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether)')
}

Так что сообщение об ошибке содержит необходимую информацию.

вы можете скачать архив с этого ссылке.

несжатая версия:

https://rawgit.com/HubSpot/tether/master/src/js/tether.js https://rawgit.com/HubSpot/tether/master/dist/css/tether.css

С помощью webpack я использовал это в webpack.config.js:

var plugins = [

    ...

    new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery",
        'window.jQuery': 'jquery',
        'window.Tether': 'tether',
        tether: 'tether',
        Tether: 'tether'
    })
];

кажется Tether был тот, кого он искал:

var Tooltip = function ($) {

  /**
   * Check for Tether dependency
   * Tether - http://tether.io/
   */
  if (typeof Tether === 'undefined') {
    throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
  }

у меня была эта проблема с requirejs, используя новейшую сборку boostrap 4. В итоге я просто определил:

<script>
  window.Tether = {};
</script>

в моем теге html head, чтобы обмануть проверку bootstrap. Затем я добавил второй оператор require непосредственно перед require, который загружает мое приложение, а затем мою зависимость bootstrap:

require(['tether'], function (Tether) {
  window.Tether = Tether;
});

require([
  "app",
], function(App){
  App.initialize();
});

используя оба из них в тандеме, и у вас не должно быть проблем с использованием текущей сборки bootstrap 4 alpha.

работает для генератора-aspnetcore-spa и bootstrap 4.

// ===== file: webpack.config.vendor.js =====    
module.exports = (env) => {
...
    plugins: [
        new webpack.ProvidePlugin({ $: 'jquery', 
                                    jQuery: 'jquery',
                                    'window.jQuery': 'jquery',
                                    'window.Tether': 'tether',
                                    tether: 'tether', 
                                    Tether: 'tether' }), 
// Maps these identifiers to the jQuery package 
// (because Bootstrap expects it to be a global variable)
            ...
        ]
};

для webpack 1 или 2 с Bootstrap 4 вам нужно

new webpack.ProvidePlugin({
   $: 'jquery',
   jQuery: 'jquery',
   Tether: 'tether'
})

Если вы используете Бранч, вы можете добавить это в конце brunch-config.js:

npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}

Если вы используете require.JS AMD loader:

// path config
requirejs.config({
  paths: {
    jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/core.js',
    tether: '//cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min',
    bootstrap: '//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min',
  },
  shim: {
    bootstrap: {
      deps: ['jquery']
    }
  }
});

//async loading
requirejs(['tether'], function (Tether) {
  window.Tether = Tether;
  requirejs(['bootstrap']);
});

решение UMD / AMD

для тех парней, которые делают это через УМД, и составляет, например, через require.js, Я нашел лаконичное решение.

в модуле, который требует tether как зависимость, которая загружает Tooltip как UMD, перед определением модуля, просто поместите короткий фрагмент на определение троса:

// First load the UMD module dependency and attach to global scope
require(['tether'], function(Tether) {
    // @todo: make it properly when boostrap will fix loading of UMD, instead of using globals
    window.Tether = Tether; // attach to global scope
});

// then goes your regular module definition
define([
    'jquery',
    'tooltip',
    'popover'
], function($, Tooltip, Popover){
    "use strict";
    //...
    /*
        by this time, you'll have window.Tether global variable defined,
        and UMD module Tooltip will not throw the exception
    */
    //...
});

этот короткий фрагмент в самом начале, на самом деле может быть поставлен на любой более высокий уровень вашего приложения, самое главное-вызвать его до фактического использования bootstrap компоненты Tether зависимость.

// ===== file: tetherWrapper.js =====
require(['./tether'], function(Tether) {
    window.Tether = Tether; // attach to global scope
    // it's important to have this, to keep original module definition approach
    return Tether;
});

// ===== your MAIN configuration file, and dependencies definition =====
paths: {
    jquery: '/vendor/jquery',
    // tether: '/vendor/tether'
    tether: '/vendor/tetherWrapper'  // @todo original Tether is replaced with our wrapper around original
    // ...
},
shim: { 
     'bootstrap': ['tether', 'jquery']       
}

прикреплять глобального объема, смогл легко извлечься поиском @todo, когда разработчики Boostrap исправит свою вещь в следующих выпусках.

чтобы добавить к ответу @adilapapaya. Ибо ember-cli пользователи, в частности, установить tether С

bower install --save tether

а потом включить его в свой ember-cli-build.js файл перед загрузкой, вот так:

// tether (bootstrap 4 requirement)
app.import('bower_components/tether/dist/js/tether.min.js');

// bootstrap
app.import('bower_components/bootstrap/scss/bootstrap-flex.scss');
app.import('bower_components/bootstrap/dist/js/bootstrap.js');

и если вы используете webpack,вам понадобится плагин expose. В webpack.конфиг.js, добавьте этот загрузчик

{
   test: require.resolve("tether"),
   loader: "expose?$!expose?Tether"
}

У меня была такая же проблема и вот как я ее решила. Я на рельсах 5.1. 0rc1

обязательно добавьте require jquery и tether внутри вашего приложения.JS файл они должны быть на самом верху, как это

//= require jquery
//= require tether

просто убедитесь, что установлен трос

Способ #1: скачать с здесь и вставьте его в свои проекты, или
Способ #2: используйте код ниже перед вашим исходным кодом сценария начальной загрузки:

<script src="https://npmcdn.com/[email protected]/dist/js/tether.min.js"></script>

Я рекомендую следовать инструкциям в Bootstrap 4 documentation:

скопировать стиль <link> в своем <head> перед всеми другими таблицы стилей для загрузки нашего CSS.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">

добавьте наши Плагины JavaScript, jQuery и Tether ближе к концу вашего страницы, прямо перед закрывающим тегом. Будьте уверены, чтобы разместить на jQuery и привязать сначала, так как наш код зависит от них. Пока мы используем jQuery тонкое строение внутри наши документы, полная версия также поддерживается.

<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>

для вас Laravel Mix пользователей там работает Bootstrap4, вам нужно будет запустить

npm installer tether --save
обновление resources/assets/js/bootstrap.js загрузить фал и привести его к объекту window.

вот как выглядит мой: (обратите внимание, что мне также пришлось запустить npm install popper.js --save)

window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Tether = require('tether');
require('bootstrap');

У меня была та же проблема, и я решил ее, включив jquery-3.1.1.мин до включения любого js, и это сработало как шарм. Надеюсь, это поможет.

Comments

    Ничего не найдено.