2014-07-01 13 views
15

Właśnie zaktualizowałem formularz [email protected] na [email protected] w mojej aplikacji Ember.js i teraz pojawia się błąd, moment nie jest zdefiniowany, kiedy wprowadzam moment() do konsoli lub dołącz go do moich skryptów.moment.js moment jest niezdefiniowany

Na dokumentach, które widziałem "Od wersji 2.4.0 obiekt eksportowany globalnie jest przestarzały." Myślę, że jest to kwestia tutaj, ale nie jestem pewien, jak mogę ustawić moment globalnie w ember tak, że wszystkie odniesienia do momentu() w naszej bazie kodu obecnie nie są zepsute.

Próbowałem aktualizacji linii, gdzie robimy wymagają ("moment") do momentu var = wymagają ("moment"), ale ma taki sam wynik. Nawet jeśli wstawię debuggera bezpośrednio za linią var moment = ..., a następnie wprowadzę moment() do konsoli, nadal otrzymam ten moment, który jest niezdefiniowany.

+0

To musi być coś innego, coś sprzecznego z requirejs? Kilka dni temu założyłem stronę z momentem 2.7.0 do testowania, która dosłownie zawiera tylko '' w momencie pisania konsoli zwraca funkcję ref. Wszelkie błędy zgłaszane przed wpisaniem momentu()? Być może sprawdź dziennik sieci, aby sprawdzić, czy jest załadowany ... – Lex

+0

Jakiego smaku ember używasz? jeśli używasz kompilacji takich jak eak lub ember-cli, musisz włączyć 'moment' w globalnej przestrzeni nazw. zrobiłeś już to? – Grapho

+0

Śledziłem problem do modułu wymagającego ładowarki węzła, nie ustawiając kontekstu na oczekiwaną chwilę. Ustawia kontekst na nowy Kontekst {}. Następnie w chwili sprawdza, czy zmienna globalna jest zdefiniowana, a jeśli nie jest (co nie jest w moim przypadku), to moment ustawi zmienną momentu na "tym" obiekcie, który jest ustawiony na kontekst {}, a nie na okno . Wyniki są definiowane, ale nie na poziomie globalnym. Zmieniając ostatnią linię w momencie.js z połączenia (to) na połączenie (okno), teraz działa. – Efarley

Odpowiedz

11

Chcesz sekcji Nowa dokumentacja.

Więc ...

<script src="moment.js"></script> 
<script> 
    moment().format(); 
</script> 

Edit

Mimo, że wygląda na to, będzie to prawdopodobnie daje ten sam problem.

Wygląda na to, że Moment.js próbuje zachęcić użytkownika do korzystania z menedżera pakietów, aby nie zabrudzić przestrzeni nazw zmiennymi globalnymi.

Przeczytać o i AMD i spróbować i uwzględnić w bieżącym stosie.

Należy robić coś takiego:

var moment = require('moment'); 

moment().format(); 

Jednak aby wykorzystać require trzeba system modułowy, jak te wyżej wymienione.

Ale

Oczywistym rozwiązaniem jest cofnąć wersję Moment.js, tak długo, jak nie trzeba nową funkcjonalność. Jak ważna może być aktualizacja na prostej bibliotece czasu ?

+0

Potrzebuję strefy czasowej, w której mamy odciętą płatność o 22:00 czasu ET i muszę sprawdzić, czy odcięcie jest porównywane z czasem na wschodnim wybrzeżu, a nie z lokalną maszyną użytkowników.Dodanie całej logiki jest nieco zawikłane, aby przetestować strefę czasową użytkowników, a następnie dostosować daty/godziny, aby przejść do wschodniego wybrzeża, gdybym mógł po prostu użyć chwili(). Tz ("Ameryka/Nowy_Jork"). Wygląda na to, że zmiany wprowadzone w odpowiednim momencie spowodują więcej aktualizacji niż sama praca nad logiką. – Efarley

+0

użycie [Strefa czasowa Moment] (http://momentjs.com/timezone/docs/) z [RequireJS] (http://momentjs.com/timezone/docs/) nie powinno być zbyt trudne do wdrożenia. Ale tak, może po prostu użycie JavaScript [obiektu daty] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) byłoby łatwiejsze, gdybyś nie chciał się uczyć o modułach. – shennan