2011-12-19 29 views
7

Şimdi Coffeescript kullanarak tüm javascript kodumu yazmaya geçiş yapıyorum, Ama hayal kırıklığına uğradım çünkü en basit örnek bana sorunlara neden oluyor. Şu an itibariyle, ben Bu işlev neden Coffeescript kullanarak çalışmıyor?

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js" type="text/javascript" charset="utf-8"></script> 
    <link href="sheet.css" rel="stylesheet" type="text/css" media="screen" /> 
    <script type="text/coffeescript"> 
    $ -> 
     sayHi() 

    sayHi = -> 
     alert 'Hi there!' 
    </script> 
</head>  
<body> 
    <div id="all"> 
    </div> 
</body> 
</html> 

yukarıdaki koddan anlaşılacağı gibi

, sadece yapmaya çalışıyorum ... Buna cevap bulmak mümkün olmadan araştırma bir saatten fazla yaptık jQuery'nin hazır işleyicisinden sayHi() işlevini çağırın. Bu ' gerektiği çalışmalarını okudum derleyici ve öğreticiler göre, tanımsız

Lütfen bana yardım bir işlev değil:

Yakalanmayan TypeError : Ama alıyorum hata şudur , Ama ben ne yapmıyorum bilmiyorum bu çalıştırmak için Korkunç yanlış :(

+0

Son defa kullanmak, tarayıcılar ... CoffeeScript tercüman ya olmasıdır yok "kahve sript.js" komut dosyası JavaScript içine CoffeeScript kodunu çeviri? –

+0

İki ifadeyi çevirmeyi denediniz mi? CoffeeScript ile hiç çalışmamıştım ama bunun bir metod/işlev tanımlanmadan önce (C gibi) çağırdığını varsayıyorum. –

+0

@ Šime Vidas Yani yanlış yaptığım şey şu: ....? – jlstr

cevap

11

text/coffeescript Etiketler, text/javascript etiketlerinden önemli bir fark var. script kütüphanesi tüm kahve betiklerini bulup derlemek zorundadır. Öylesine ki hepsini bulmak için emin olabilirsiniz.

Diğer sorun, jQuery olay gerçekleşmişse hemen DOM hazır geri çağırma işlemini başlatır. Ve bu durumda o var. Bu Bunu almak JS için derlendi Yani

:

var sayHi; 
$(function() { 
    return sayHi(); 
}); 
sayHi = function() { 
    return alert('Hi there!'); 
}; 

ne olur ise:

  • bunu undefined yapım hiçbir değerle sayHi değişken bildirmek.
  • Bu değişkeni kullanan jQuery için DOM hazır geri çağrısı oluşturun.
  • jQuery, hemen DOM hazır olduğundan, geri arama işlevini hemen çalıştırır.
  • Geri arama işlevi yürütülür ve hala tanımlanmamış olan sayHi()'u çalıştırmayı dener.
  • Geri arama bittikten sonra, sayHi, çalıştırmak istediğiniz işleve ayarlanır. Bu normal bir JS etiketi olsaydı

Şimdi, yüklenen dokümanın önce çalıştırmak olabilir ve geri arama aslında koştu zaman, o zaman sayHi düzgün atanmış çünkü o zaman iyi çalıştı olurdu.

Düzeltmek için, geri aramada geçişten ÖNCE işlevi atamalısınız. Ya da zaten DOM hazır ateşli olduğunu bildiğinizden beri $(->) yapmadan atlayabilirsiniz. Ama gerçekten, bu coffeescript etiketlerini kullanmamanın önemli bir nedeni. Bir JS etiketi kullanmakla aynı şey değil. Birçok nedenden biri de bu, gerçek bir web sitesinde CoffeeScript'i kullanmak için önerilen yaklaşım değildir. Tarayıcınız sorumlu bir geliştirici :)

+0

Ama tarayıcı evet hemen tüm '

4

Kapak ifadeleri gibi görmeden

Yani kahve komut derlemek. CoffeeScript'in, kodunuzun sırasına göre tanımlanana kadar bir işlev/yöntem çağrısı yapamayacağınız eski C ile aynı sınırlamalara sahip olduğu anlaşılıyor.

yüzden kontrol

<script type="text/coffeescript"> 
    sayHi = -> 
    alert 'Hi there!' 

    $ -> 
    sayHi() 
</script> 
+0

Yapabilirsin, sorta. Bu durumda işe yaramazdı, bu durumda geri arama hemen çalışıyordu. Daha sonra koştuğunda iyi çalıştı. –