Do you build things with AMP? Fill out the AMP Developer Survey!
AMP

amp-mustache

Description

Mustache.js şablonlarının oluşturulmasına izin verir.

Required Scripts

<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js"></script>

Mustache.js oluşturulmasına izin verir.

Zorunlu Komut Dosyası
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js"></script>
Örnekler Örneklerle AMP ek açıklamalı amp-mustache örneğine bakın.

Sürüm notları

Sürüm Açıklama
0.2 <svg> öğeleri için destek ve daha küçük paket boyutu (12,2 KB - 20,5 KB, gzip ile sıkıştırılmış).

Daha modern bir temiz HTML kitaplığına (Caja'dan DOMPurify'a) geçiş. Bu, etiket ve özellik beyaz listesi oluşturmadaki farklılıklar nedeniyle zarar veren küçük değişikliklere neden olabilir. Oluşturulan işaretlemedeki değişikliklerin işlevselliği etkilemediğinden emin olmak için üretim kanalına aktarmadan önce sayfalarınızı test etmenizi öneririz.
0.1 İlk uygulama.

Söz dizimi

Mustache, mantık içermeyen bir şablon söz dizimidir. Daha ayrıntılı bilgi için Mustache.js dokümanlarına bakın. Temel Mustache etiketlerinden bazıları şunlardır:

  • {{variable}}: Bir değişken etiketi. Bir değişkenin çıkış karakterli HTML değerini verir.
  • {{#section}}{{/section}}: Bir bölüm etiketi. Bir değişkenin varlığını test edebilir ve bir dizi olması halinde testi tekrarlayabilir.
  • {{^section}}{{/section}}: Ters çevrilmiş bir etiket. Bir değişkenin var olmayışını test edebilir.
  • {{{unescaped}}}: Çıkış karaktersiz HTML. Sağlayabileceği işaretlemede kısıtlanmıştır (aşağıdaki "Kısıtlamalar" konusuna bakın).

Kullanım

amp-mustache şablonu, AMP Şablon Spesifikasyonu'na göre tanımlanmalı ve kullanılmalıdır.

Öncelikle amp-mustache şu şekilde beyan edilmeli/yüklenmelidir:

<script src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js" async="" custom-template="amp-mustache"></script>

Daha sonra, Mustache şablonları bir script veya template etiketinde şu şekilde tanımlanabilir:

<!-- Şablon etiketi kullanma. -->
<template type="amp-mustache">
  Hello {{world}}!

veya

<script type="text/plain" template="amp-mustache">
  Hello {{world}}!
</script>

AMP doğrulaması yararlı dev-x ipuçları sağladığından, mümkün olan her yerde template etiketini kullanın. Uç durumlar ve tablo bağlamında şablon oluşturma sorunları için script şablonunu kullanın. Aşağıdaki "Tablolar" bölümüne bakın.

Şablonların nasıl keşfedileceğine, ne zaman oluşturulacağına ve verilerin nasıl sağlanacağına, içeriğini oluşturmak için bu şablonu kullanan hedef AMP öğesi (ör. bir amp-list, amp-form vb.) karar verir.

Kısıtlamalar

Doğrulama

Tüm AMP şablonları gibi amp-mustache şablonlarının da iyi biçimlendirilmiş DOM parçaları olmalıdır. Bu, diğer noktaların yanı sıra, amp-mustache etiketini şunlar için kullanamayacağınız anlamına gelir:

  • Etiket adını hesaplama. Örneğin, <{{tagName}}> öğesine izin verilmez.
  • Özellik adını hesaplama. Örneğin, <div {{attrName}}=something> öğesine izin verilmez.

"Üçlü mustache"ın sonucu yalnızca şu etiketlere izin verecek şekilde temizlenir: a, b, br, caption, colgroup, code, del, div, em, i, ins, li, mark, ol, p, q, s, small, span, strong, sub, sup, table, tbody, time, td, th, thead, tfoot, tr, u, ul.

Temizleme

Mustache çıktısı, güvenlik nedenleriyle ve AMP'nin geçerliliğini korumak için temizlenir. Bu, belirli öğelerin ve özelliklerin haber verilmeden kaldırılmasına neden olabilir.

Güçlükler

İç içe yerleştirilmiş şablonlar

AMP Doğrulaması'na göre <template> öğeleri, diğer <template> öğelerinin alt öğeleri olmamalıdır. Bu durum, amp-list ve amp-form gibi, şablonları kullanan iki bileşen iç içe yerleştirilirken ortaya çıkabilir.

Bu sorunu geçici olarak çözmek için <template> öğeleri, bileşendeki template özelliği aracılığıyla id bilgilerine göre referans alınabilir. Örneğin:

<amp-list id="myList" src="https://foo.com/list.json">
  <template type="amp-mustache">
    <div>{{title}}</div>
  </template>
</amp-list>

Şu şekilde de gösterilebilir:

<!-- İç içe yerleştirmeyi önlemek için şablonları dışlama. -->
<template type="amp-mustache" id="myTemplate">
  <div>{{title}}</div>
</template>

<amp-list id="myList" src="https://foo.com/list.json" template="myTemplate">
</amp-list>

Tablolar

AMP şablon dizelerinin <template> öğelerinde belirtilmesi gerektiğinden bu durum, tarayıcı ayrıştırması nedeniyle beklenmeyen davranışlara neden olabilir. Örneğin, <table> öğelerinin, metnin koruyucu üst öğesi olmasına neden olabilir. Aşağıdaki örnekte:

<template type="amp-mustache">
  <table>
    <tr>
      {{#foo}}<td></td>{{/foo}}
    </tr>
  </table>
</template>

Tarayıcı, {{#foo}} ve {{/foo}} metin düğümlerinin koruyucu üst öğesi olur:

{{#foo}}
{{/foo}}
<table>
  <tr>
    <td></td>
  </tr>
</table>

Geçici çözümler arasında Mustache bölümlerinin HTML yorumlarında sarmalanmasını (ör. <!-- {{#bar}} -->), bunun yerine <div> gibi tablo dışı öğelerin veya şablonlarınızı tanımlamak için bir <script type="text/plain"> etiketinin kullanılmasını içerir.

<script type="text/plain" template="amp-mustache">
  <table>
    <tr>
      {{#foo}}<td></td>{{/foo}}
    </tr>
  </table>
</script>

Çıkış karakterlerini alıntılama

Özellik değerlerini hesaplamak için amp-mustache kullanılırken çıkış karakterlerini alıntılama bir sorun olabilir. Örneğin:

<template type="amp-mustache">
<!-- foo değişkenindeki bir çift tırnak (") HTML'nin bozulmasına yol açar. -->
<amp-img alt="{{foo}}" src="example.jpg" width="100" height="100"></amp-img>

<!-- bar değişkenindeki bir tek tırnak (') veya çift tırnak (") AMP çalışma zamanı ayrıştırma hatasına neden olur. -->
<button on="tap:AMP.setState({foo: '{{bar}}'})">Click me</button>
</template>

Mustache HTML &amp; çıkış karakterlerini kullanacağından (ör. &quot; -> &amp;quot;) {{foo}} veya {{bar}} değişkenlerinde HTML karakter kodlarının kullanılması işe yaramaz. Bir geçici çözüm ise ′ (&prime;) ve ″ (&Prime;) gibi tıpkı basım karakterlerin kullanılmasıdır.

Bunun yerine, bu değişikliğin amp-mustache içinde gerçekleştirilmesi için açık bir teklif vardır. Bu teklifi desteklemek isterseniz lütfen konu hakkında yorum yapın.

HTML varlıkları

HTML varlıkları, <template> öğelerinde korunmaz.

Kullanıcı tarafından oluşturulmuş metin içeren bir <template> öğesinin sunucu tarafında oluşturulmasını isterseniz, {{, }}, {{{, }}} içeren kullanıcı tarafından oluşturulmuş metin bir Mustache bölümü olarak işleneceğinden bir soruna neden olabilir. Örneğin, {{ karakterlerinin &lcub;&lcub; HTML varlıklarıyla değiştirilmesi, tarayıcı <template> öğesini ayrıştırdığında bu varlıklar korunmayacağı için işe yaramaz.

Geçici çözümler, {{ gibi dizeleri farklı karakterlerle değiştirmeyi veya bunları kullanıcı tarafından oluşturulmuş içerikten bütünüyle ayırmayı içerir.

Doğrulama

AMP doğrulayıcı spesifikasyonundaki amp-mustache kurallarına bakın.

Daha fazla yardıma mı ihtiyacınız var?

Bu belgeyi defalarca okudunuz ama tüm sorularınıza tatmin edici bir yanıt bulamadınız mı? Belki başka kişiler de bu şekilde hissetmiştir: Stack Overflow'dan onlara ulaşın.

Stack Overflow'a git
Bir hata veya eksik bir özellik mi buldunuz?

AMP projesi, katılımınızı ve katkılarınızı güçlü bir şekilde teşvik ediyor! Açık kaynak topluluğumuzun devamlı bir katılımcısı olacağınızı umuyoruz ancak özel olarak ilgilendiğiniz konularla ilgili tek seferlik katkıları da memnuniyetle karşılıyoruz.

GitHub'a git