2015-12-19 12 views
10

Najnowsza wersja beta (v4) Bootstrapa używa Tether js do pozycjonowania elementów, nie mogę pozwolić, aby działało w mojej aplikacji Requirejs.Powiązanie paska narzędzi z wymaganiem JS

w moim requirejs config Mam następujący podkładka na

paths: { 
    jquery: '/path/to/jquery', 
    tether: '/path/to/tether' 
}, 
shim: { 
    'bootstrap': ['tether', 'jquery']  
} 

A kiedy chcę włączyć podpowiedzi w mojej aplikacji, używam następujący kod, który moim zdaniem jest prawidłowe

function page_events() { 
    requirejs(['bootstrap'], function(bootstrap) { 
     $('[data-toggle="tooltip"]').tooltip(); 
    }); 
} 

Powinno to wczytaj najpierw zależności bootstraps, a następnie wykonaj kod. Więc zwykle Tether powinien być włączony przed tym kawałkiem kodu.

Ale wynik konsola jest

Uncaught ReferenceError: Tether is not defined

Czy ktoś ma ten sam problem?

+0

Możliwy duplikat [Jak naprawić błąd; "Błąd: etykiety narzędzi Bootstrap wymagają Tether (http://github.hubspot.com/tether/)'](http://stackoverflow.com/questions/34567939/how-to-fix-the-error-error-bootstrap- tooltips-require-tether-http-github-h) – Farside

Odpowiedz

0

Jeśli chcesz, aby Tether był dostępny globalnie, powinieneś dołączyć go ręcznie za pomocą znacznika skryptu. RequireJS nie ujawnia tego.

<script type="text/javascript" src="/js/tether.js"></script> 
<script type="text/javascript" src="/js/optimized.min.js"></script> 
+0

to nie jest dokładnie to, co @webmaster pyta, jak to wyraźnie widać z pytania, że ​​używa 'requireJS' i sugerujesz załadowanie skryptu nie jako zależności modułu, który zrywa cała koncepcja. Możesz rzucić okiem na rozwiązanie dla [UMD/AMD tutaj] (http://stackoverflow.com/a/36138671/4354249). – Farside

7

Utwórz skrypt tak:

define(['lib/tether.min'], function(tether) { 
    window.Tether = tether; 
    return tether; 
}); 

następnie zmienić to:

paths: { 
    jquery: '/path/to/jquery', 
    // tether: '/path/to/tether' 
    tether: '/path/to/your-own-tether' 
}, 
shim: { 
    'bootstrap': ['tether', 'jquery']  
} 

Dlaczego? ponieważ przeglądarka tego wymaga:

window.Tether = tether; // May be both requirejs and tether didn't do this 
+0

to "przywrócić tether;" naprawdę potrzebne tutaj? – Farside

+1

Nie, 'window.Tether' powoduje, że' Tether' jest dostępny globalnie. Jeśli nic nie zwrócisz, gdy 'need' tether, argument' tether' będzie 'undefined'. Tak, to tylko dla spójności. –

Powiązane problemy