Wpis z mikrobloga

#problem / #pytanie + #coffeescript + #webdev + #programowanie + #javascript (ale ładna #chmuratagow... i tak - bardzo przepraszam że was wołam, no ale jednak wolałbym się czegokolwiek dowiedzieć co robię źle, bo aktualnie - nie wiem, co robię źle)

No cóż... Tak więc... To znowu ja. I znowu mam nietypowy... problem, albo raczej - moja niewiedza dotycząca coffeescript jest jeszcze zbyt daleka od ideału, w związku z czym się... pogubiłem, bo zamiast czytać dokumentację, wolę praktykę (tak już mam).

Otóż - mam sobie Windowsa 10, mam sobie serwer IIS, współpracują rewelacyjnie, ale... do czasu, ponieważ:

1. Mimo zdefiniowania "mimetype" dla coffeescript jako "text/plaintext", stronka go zwyczajnie olewa.

2. Wczytywanie "dżawaskryptu" działa normalnie... do czasu.

Już tłumaczę co oznacza "do czasu":

Więc - mam taki oto skrypt na pastebin, który działa perfekcyjnie i wyświetla małą wizualizację. Postanowiłem więc przepisać go do Coffeescript (przykład tutaj) i sprawdzić, czy po kompilacji rzeczywiście będzie tak samo działał, ale - "tu patrz na punkt pierwszy". Co więcej, coffeescript po skompilowaniu wygląda nieco inaczej - przykład oczywiście na pastebinie i... przy załadowaniu stronki, konsola Firefoxa stwierdza, iż - "tu patrz na punkt drugi":

TypeError: setupAudioNodes is not a function


setupAudioNodes();

Co w ogóle jest dla mnie ciężkie do ogarnięcia, bo przecież "kod wygląda tak samo jak wyglądał, hurr durr, dlaczego w związku z tym się nie wczytuje"...

Co najlepsze - oryginalny skrypt działa sobie jak gdyby nigdy nic, ten który ja napisałem - nie... Czy jestem aż tak kijowy?

Ogółem chciałem tylko i wyłącznie podpytać, jak uruchamiać skrypty .coffee w taki sam sposób jak .js, w sensie aby serwer i wszystko co zawarte w pliku .html poprawnie się interpretowało, ale... chyba jednak zbyt mocno się wyżaliłem, czego efektem jest tekst powyżej.
  • 5
@Linux__Shines: w sumie to nie wiem o co Ci chodzi do końca :D

ale patrząc szybko na kod to w tej funkcji:

drawSpectrum = (array) ->

        i = 0



while
```**```
 i < (array.length)

                val = array[i]

                ctx.fillRect(i * 5, 325 - val, 3, 325)

        
```**```
return
```**brakuje ```
i++
```, czyli:```

drawSpectrum = (array) ->

        i = 0

        
```**```
while
```**```
 i < (array.length)

                val = array[i]

                ctx.fillRect(i * 5, 325 - val, 3, 325)

i++

        
```**```
return

</b>

To tak przy okazji :D
@Linux__Shines:

setupAudioNodes
NIE jest jeszcze funkcją w linii

18
wygenerowanego JSa.

Tzn zmienna

setupAudioNodes
jest zadeklarowana, ale jeszcze nie ma przypisanej wartości, bo chcesz wywołać ją w linii

18
, a przypisanie funkcji do zmiennej jest w linii

20
.

Poczytaj o

hoisting
w JS:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

Dwa rozwiązania:

1. Przypisz funkcję do zmiennej zanim z tej zmiennej skorzystasz.

2. Zadeklaruj funkcję

setupAudioNodes
, zamiast robić zmienną

setupAudioNodes
i do niej przypisywać
Ja pieprze, net mi tak źle chodzi, że wypok do końca załadować się nie chce i nie mogę edytować komentarza :/

Formatowanie się ujowe zrobiło, oczywiście chodzi mi o to:

drawSpectrum = (array) ->

  i = 0




while
```**```
 i < (array.length)

    value = array[i]

    ctx.fillRect i * 5, 325 - value, 3, 325

    i++

  
```**```
return

</b>
@RonPaul: O inkrementacji za pomocą i++ za to w ogóle nie pomyślałem, ale dosyć szybko ogarnąłem, niestety - to nie jest tego wina. A chodzi mi o to, że przepisany przeze mnie kod - po prostu nie działa. To tak w "ultra super hiper gigantycznym" uproszczeniu. :D

@MacDada: No okej, ale to jest w JS, a ja wolę się "zabawić" z coffeescript, co prawda - przeniosłem po prostu wywoływanie funkcji