Jade / Pug ile satır içi JavaScript'i nasıl oluşturabilirim?


222

Jade'i kullanarak sayfamda görüntülenmesi için JavaScript almaya çalışıyorum (http://jade-lang.com/)

Projem Express ile NodeJS'de, kafanın içinde satır içi JavaScript yazmak isteyene kadar her şey doğru çalışıyor. Yeşim belgelerinden örnekler bile alsam neyi kaçırdım?

Yeşim şablonu

!!! 5
html(lang="en")
  head
    title "Test"
    script(type='text/javascript')
      if (10 == 10) {
        alert("working")
      }
  body

Oluşturulan HTML tarayıcıda sonuçlandı

<!DOCTYPE html>
<html lang="en">
<head>
  <title>"Test"</title>
  <script type="text/javascript">
    <if>(10 == 10) {<alert working></alert></if>}
  </script>
</head>
<body>
</body>
</html>

Kesinlikle burada bir fikir özledim mi?


3
.(type='text/javascript')
— Warface'ten

1
!!! 5kullanımdan kaldırılmışsa, kullanmalısınızdoctype html
— Joaquinglezsantos

Yanıtlar:


369

sonra nokta içeren bir 'script' etiketi kullanmanız yeterlidir.

script.
  var users = !{JSON.stringify(users).replace(/<\//g, "<\\/")}

https://github.com/pugjs/pug/blob/master/examples/dynamicscript.pug


İyi bir çözüm, ancak bunun <script>yerine üretecek <script type="text/javascript">.
— Vojto

47
type="text/javascript"etiketlerdeki typealan için varsayılan değerdir <script>. Ayarlamanıza gerek yok.
— Adam Fabicki

Çok satırlı kod ne olacak? Bu şekilde Jade'e gömüldüğümde Javascript'imde uygun kod girintisine sahip olmanın bir yolu var mı?
— missingfaktor

6
Jade'in politikası değişti, şimdi satır içi komut dosyası etiketinin .eklenmesi gerekiyor. Bunu script.girintili JS bloğunuz izler.
— joeytwiddle

4
Bu örnek bir komut dosyası enjeksiyon güvenlik açığıdır. Bkz. Github.com/visionmedia/jade/issues/1474
— Jason Merrill

104

:javascriptFiltre çıkarıldı sürüm 7.0

Docs diyor bir kullanmalıdır scriptbir takip şimdi etiketi, .char ve hiçbir önceki uzay.

Misal:

script.
  if (usingJade)
    console.log('you are awesome')
  else
    console.log('use jade')

derlenecek

<script>
  if (usingJade)
    console.log('you are awesome')
  else
    console.log('use jade')
</script>

tag script sonra bir nokta ile, tüm javascript blok satırsonu olmadan render herhangi bir yolu var mı?
— Joaquinglezsantos

@Joaquinglez bilmediğim değil
— Felipe Sabino

55

Belirtilen türde komut dosyası etiketini kullanın, noktadan önce ekleyin:

script(type="text/javascript").
  if (10 == 10) {
    alert("working");
  }

Bu derleme:

<script type="text/javascript">
  if (10 == 10) {
    alert("working");
  }
</script>

1
sadece iyi script.olurdu.
— NoobTW

24

Yalnızca komut dosyası etiketi kullanmayın.

Çözüm |:

script
  | if (10 == 10) {
  |   alert("working")
  | }

Veya aşağıdakilerle .:

script.
  if (10 == 10) {
    alert("working")
  }

6
Ben tavsiye ederim .. Aksi takdirde |her satıra yazmanız gerekir .
— Ilyas karim

2

CEVAPIMIN ÜÇÜNCÜ SÜRÜMÜ:

İşte satır içi Jade Javascript için çok satırlı bir örnek. Bunu kullanmadan yazabileceğini sanmıyorum -. Bu, kısmi olarak kullandığım bir flash mesaj örneğidir. Bu yardımcı olur umarım!

-if(typeof(info) !== 'undefined')
  -if (info)
    - if(info.length){
      ul
        -info.forEach(function(info){
          li= info
      -})
  -}

Almak istediğiniz kod sorunuzdaki kodu derliyor mu?

Eğer öyleyse, iki şeye ihtiyacınız yoktur: birincisi, Javascript / script olduğunu beyan etmeniz gerekmez, yazdıktan sonra kodlamaya başlayabilirsiniz -; ikinci olarak, yazdıktan sonra ya da -ifyazmanız gerekmez . Jade'i tatlı yapan da budur.{}

-------------- AŞAĞIDAKİ ORİJİNAL CEVAP ---------------

Prepending deneyin ifile -:

-if(10 == 10)
  //do whatever you want here as long as it's indented two spaces from
   the `-` above

Ayrıca tonlarca Yeşim örneği vardır:

https://github.com/visionmedia/jade/blob/master/examples/


Teşekkürler John bunu tek tek satır için kullandı, ancak yine de '-' ile eklemeden birden fazla satır yapmayı göremiyorum. Jade ana sayfası ( link , ne yapmaya çalıştığımın bir örneğine sahip, ancak derlenmeyecek. En son sürümü de kullanıyorum.
— JMWhittaker

Peki, eğer birden fazla Javascript kodu satırının bir tane altında olmasını istersiniz?
— JohnAllen

@Bluey burada aynı, bunu işe yaramadım. Github konularını sormalısınız.
— Mark

Mark, şimdi Jade yerine Sam Stephenson's Eco'yu kullanmaya başladı. Test için hızlı bir kullanıcı arayüzü olarak yeşim kullanıyordum.
— JMWhittaker

Jade 0.12.4 altında JS ile - eklemeden script () sağlar.
— Richard Holland

1

Çok satırlı içerik için yeşim taşı normalde "|" kullanır, ancak:

Yalnızca komut dosyası, stil ve metin alanı gibi metinleri kabul eden etiketler için başa gerek yoktur | karakter

Bu, yaşadığınız sorunu yeniden üretemiyorum dedi. Bu kodu bir yeşim şablonuna yapıştırdığımda, doğru çıktıyı üretir ve sayfa yükleme konusunda beni uyarır.


0

:javascriptFiltreyi kullanın . Bu bir komut dosyası etiketi oluşturur ve komut dosyası içeriğinden CDATA olarak kaçar:

!!! 5
html(lang="en")
  head
    title "Test"
    :javascript
      if (10 == 10) {
        alert("working")
      }
  body

@aaaidan Haklısın. Scalate tarafından destekleniyor (burada sorunsuz kullanıyorum: github.com/cb372/phone-home/blob/master/src/main/webapp/WEB-INF/… ) ama saf Jade yok gibi görünüyor burada listelenmediği için destekleyin: github.com/visionmedia/jade#features . Bu utanç verici!
— Chris B

Evet, güzel olurdu. Üst cevabın dediği gibi, iyi script.çalışıyor ve yasal!!! 5
— aaaidan

0
script(nonce="some-nonce").
  console.log("test");

//- Workaround
<script nonce="some-nonce">console.log("test");</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.