Panduan pemula ' s ke hendal
Takeaways Key
- Handlebars adalah enjin templating logik-kurang yang memanjangkan misai, menambah logik yang minimum melalui pembantu, menjadikannya sesuai untuk memisahkan struktur HTML dari logik perniagaan dan meningkatkan pemeliharaan aplikasi.
- Penciptaan templat dalam hendal melibatkan menggunakan pendakap keriting berganda `{{}}` untuk pembolehubah, yang boleh dikompilasi untuk meningkatkan prestasi dan mengurangkan pemprosesan sisi klien.
- hendal menyokong pembantu tersuai, membolehkan pemaju melaksanakan logik kompleks dalam templat, memberikan fleksibiliti melampaui pengikatan data mudah.
- Templat separa di hendal memudahkan kebolehgunaan kod di seluruh bahagian aplikasi, menyelaraskan proses pembangunan dan mengekalkan konsistensi.
- Precompilation of Templates Handlebars dapat meningkatkan prestasi aplikasi web dengan meminimumkan overhead kompilasi runtime di sisi klien.
Handlebar adalah enjin templating logik yang kurang menghasilkan halaman HTML anda secara dinamik. Ia adalah lanjutan kumis dengan beberapa ciri tambahan. Misai adalah logik sepenuhnya tetapi hendal menambah logik yang minimum terima kasih kepada penggunaan beberapa pembantu (seperti jika, dengan, kecuali, setiap satu) bahawa kita akan membincangkan lebih lanjut dalam artikel ini. Sebenarnya, kita boleh mengatakan bahawa hendal adalah superset kumis.
<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
ia memudahkan tugas mengemas kini data secara manual pada pandangan
- Ia digunakan dalam rangka kerja dan platform yang popular seperti Ember.js, Meteor.js, Derby.js dan Ghost
- Saya harap rekap pendek ini membantu anda dalam menentukan jika ia bernilai menggunakan hendal atau tidak.
-
bagaimana ia berfungsi?
- Fungsi ini kemudian dilaksanakan dengan meluluskan objek JSON sebagai hujah. Objek JSON ini dikenali sebagai konteks dan mengandungi nilai -nilai pembolehubah yang digunakan dalam templat
- Pada pelaksanaannya, fungsi mengembalikan HTML yang diperlukan setelah menggantikan pembolehubah templat dengan nilai yang sepadan
templat
Templat boleh ditulis dalam fail HTML atau secara berasingan. Dalam kes pertama, mereka muncul di dalam tag
dengan atribut jenis = "teks/x-handlebars-templat" dan ID. Pembolehubah ditulis dalam pendakap keriting berganda {{}} dan dikenali sebagai ungkapan. Berikut adalah contoh: Dengan markup ini, kita dapat melihat apa yang perlu kita lakukan. Dalam fail JavaScript anda, kami perlu mengambil templat dari dokumen HTML. Dalam contoh berikut, kami akan menggunakan ID templat untuk tujuan ini. Selepas templat telah diambil, kami dapat menyusunnya dengan menggunakan kaedah handlebars.Compile () yang mengembalikan fungsi. Fungsi ini kemudian dilaksanakan dengan lulus konteks sebagai hujah. Apabila pelaksanaan selesai, fungsi mengembalikan HTML yang dikehendaki dengan semua pembolehubah yang digantikan dengan nilai yang sepadan. Pada ketika ini kita boleh menyuntik HTML ke laman web kami.
Mengubah keterangan ini ke dalam hasil kod dalam coretan berikut:<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span><span><span><script</span> id<span>="handlebars-demo"</span> type<span>="text/x-handlebars-template"</span>></span><span><span><div>My name is {{name}}. I am a {{occupation}}.</div></span></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSekarang sudah tiba masanya untuk menyelam sedikit lebih mendalam ke hendal. Kami akan melalui beberapa istilah penting dan sintaks yang membentuk teras hendal.
Ekspresi
kita sudah melihat ungkapan di bahagian di atas. Pembolehubah yang digunakan di dalam templat dikelilingi oleh pendakap keriting berganda {{}} dan dikenali sebagai ekspresi:
HTML Escaping
hendal boleh melepaskan nilai yang dikembalikan oleh ungkapan. Sebagai contoh watak
<span>// Retrieve the template data from the HTML (jQuery is used here).var template = $('#handlebars-demo').html(); </span><span>// Compile the template data into a functionvar templateScript = Handlebars.compile(template); </span><span>var context = { "name" : "Ritesh Kumar", "occupation" : "developer" }; </span><span>// html = 'My name is Ritesh Kumar. I am a developer.'var html = templateScript(context); </span><span>// Insert the HTML code into the page$(document.body).append(html);</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span>My name is {{name}}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukdemo langsung yang menunjukkan ciri ini boleh didapati dalam demo codepen ini
Komen
kita juga boleh menulis komen di dalam templat handlebars. Sintaks untuk komen hendal adalah {{! TypeyourcommentHere}}. Walau bagaimanapun, setiap komen yang mempunyai}} di dalamnya atau mana-mana simbol lain yang mempunyai makna khas dalam hendal hendaklah ditulis dalam bentuk {{!-typeyourcommenthere--}}. Komen Handlebars tidak dapat dilihat di HTML tetapi jika anda ingin menunjukkannya, anda boleh menggunakan komen HTML standard: .
Jika kita memohon semua konsep ini untuk templat yang kita gunakan, kita boleh membuat kod yang ditunjukkan di bawah:
Jika kita menggunakan templat sebelumnya dengan pembolehubah konteks yang dilaporkan di bawah:<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span><span><span><script</span> id<span>="handlebars-demo"</span> type<span>="text/x-handlebars-template"</span>></span><span><span><div>My name is {{name}}. I am a {{occupation}}.</div></span></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukyang akan mengakibatkan penyemak imbas tidak menunjukkan kandungan di dalam komen HTML standard. Demo contoh ini boleh didapati di sini.
Blok<span>// Retrieve the template data from the HTML (jQuery is used here).var template = $('#handlebars-demo').html(); </span><span>// Compile the template data into a functionvar templateScript = Handlebars.compile(template); </span><span>var context = { "name" : "Ritesh Kumar", "occupation" : "developer" }; </span><span>// html = 'My name is Ritesh Kumar. I am a developer.'var html = templateScript(context); </span><span>// Insert the HTML code into the page$(document.body).append(html);</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span>My name is {{name}}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukUntuk memahami lebih baik topik ini, kami akan menggunakan contoh di bawah di mana kami menggunakan setiap penolong (dibincangkan secara terperinci kemudian). Seperti yang anda harapkan, yang terakhir melangkah ke atas item array.
Dalam contoh ini, kami akan menggunakan template berikut:
dengan menyediakan pembolehubah konteks ini:
Kami akan memperoleh output yang ditunjukkan di bawah:I am learning {{language}}. It is {{{adjective}}}.
Salin selepas log masukSalin selepas log masukSalin selepas log masuk<span>var context = {"language" : "<h3>Handlebars</h3>","adjective": "<h3>awesome</h3>"}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukpembantu
Walaupun hendal adalah enjin templat yang kurang logik, ia boleh melaksanakan logik mudah menggunakan pembantu. Penolong Handle adalah pengecam mudah yang boleh diikuti oleh parameter (dipisahkan oleh ruang), seperti yang ditunjukkan di bawah:
I am learning <span><span><span><h3</span>></span>Handlebars<span><span></h3</span>></span>. It is <span><span><h3</span>></span>awesome<span><span></h3</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masuksetiap penolong
Setiap penolong digunakan untuk melangkah ke atas array. Sintaks penolong adalah {{#each arrayname}} yourContent {{/each}}. Kita boleh merujuk kepada item array individu dengan menggunakan kata kunci ini di dalam blok. Indeks elemen array boleh diberikan dengan menggunakan {{@index}}. Contoh di bawah menggambarkan penggunaan setiap penolong.
Jika kita menggunakan template berikut:
bersempena dengan pembolehubah konteks ini:<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span><span><span><script</span> id<span>="handlebars-demo"</span> type<span>="text/x-handlebars-template"</span>></span><span><span><div>My name is {{name}}. I am a {{occupation}}.</div></span></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDemo langsung contoh ini boleh didapati di Codepen.
Jika penolong<span>// Retrieve the template data from the HTML (jQuery is used here).var template = $('#handlebars-demo').html(); </span><span>// Compile the template data into a functionvar templateScript = Handlebars.compile(template); </span><span>var context = { "name" : "Ritesh Kumar", "occupation" : "developer" }; </span><span>// html = 'My name is Ritesh Kumar. I am a developer.'var html = templateScript(context); </span><span>// Insert the HTML code into the page$(document.body).append(html);</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukkebenaran
, hendal akan menjadikan blok tersebut. Kami juga boleh menentukan seksyen templat yang dikenali sebagai "seksyen lain", dengan menggunakan {{else}}. Kecuali pembantu adalah kebalikan dari penolong jika. Ia menjadikan blok apabila keadaan menilai nilaifalsy . Untuk menunjukkan bagaimana penolong jika berfungsi, mari kita pertimbangkan templat di bawah:
<span>My name is {{name}}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukKami akan memperoleh keputusan yang dilaporkan di bawah:
ini berlaku kerana array kosong adalahI am learning {{language}}. It is {{{adjective}}}.
Salin selepas log masukSalin selepas log masukSalin selepas log masukfalsy
nilai.<span>var context = {"language" : "<h3>Handlebars</h3>","adjective": "<h3>awesome</h3>"}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukPembantu Custom Anda boleh membuat pembantu anda sendiri untuk melakukan logik yang kompleks menggunakan sistem ekspresi yang disediakan oleh hendal. Terdapat dua jenis pembantu: pembantu fungsi dan pembantu blok. Takrif pertama dimaksudkan untuk ungkapan tunggal, manakala yang terakhir digunakan untuk ekspresi blok. Hujah -hujah yang diberikan kepada fungsi panggil balik adalah parameter yang ditulis selepas nama pembantu, dipisahkan oleh ruang. Pembantu dibuat menggunakan handlebars.RegistHelper () Kaedah:
Helper Fungsi Custom
Sintaks untuk penolong fungsi adalah {{HelperName Parameter1 Parameter2 ...}}. Untuk lebih memahami bagaimana untuk meneruskan pelaksanaannya, mari kita buat penolong fungsi yang dipanggil StudyStatus yang mengembalikan rentetan yang akan "diluluskan" jika lulus = 2015:
Dalam contoh kami parameter hanya satu. Walau bagaimanapun, jika kita mahu lulus lebih banyak parameter ke fungsi panggil balik pembantu kita boleh menulisnya dalam templat selepas parameter pertama dipisahkan oleh ruang.I am learning <span><span><span><h3</span>></span>Handlebars<span><span></h3</span>></span>. It is <span><span><h3</span>></span>awesome<span><span></h3</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masuk<span><!-- I am learning {{language}} -->I am learning {{language}}. It is {{!--adjective--}}</span>
Salin selepas log masukSalin selepas log masuk<span>var context = {"language" : "Handlebars","adjective": "awesome"}</span>
Salin selepas log masukDemo langsung contoh ini boleh didapati di sini.
Helper Blok Custom
Pembantu blok tersuai digunakan dengan cara yang sama seperti pembantu fungsi, tetapi sintaks agak berbeza. Sintaks pembantu blok adalah:<span><!-- I am learning Handlebars -->I am learning Handlebars. It is</span>
Salin selepas log masuk<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukApabila kami mendaftarkan pembantu blok tersuai, hendal secara automatik menambah objek pilihan sebagai parameter terakhir ke fungsi panggil balik. Objek Pilihan ini mempunyai kaedah FN () yang membolehkan kita mengubah konteks objek sementara untuk mengakses harta tertentu. Mari kita ubah contoh bahagian sebelumnya dengan menggunakan pembantu blok bernama StudyStatus tetapi dengan pembolehubah konteks yang sama:
Jika kod ini digunakan bersempena dengan templat yang ditakrifkan di bawah<span><span><span><script</span> id<span>="handlebars-demo"</span> type<span>="text/x-handlebars-template"</span>></span><span><span><div>My name is {{name}}. I am a {{occupation}}.</div></span></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span>// Retrieve the template data from the HTML (jQuery is used here).var template = $('#handlebars-demo').html(); </span><span>// Compile the template data into a functionvar templateScript = Handlebars.compile(template); </span><span>var context = { "name" : "Ritesh Kumar", "occupation" : "developer" }; </span><span>// html = 'My name is Ritesh Kumar. I am a developer.'var html = templateScript(context); </span><span>// Insert the HTML code into the page$(document.body).append(html);</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDan inilah demo codepen.
Templat separa<span>My name is {{name}}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukI am learning {{language}}. It is {{{adjective}}}.
Salin selepas log masukSalin selepas log masukSalin selepas log masukia akan memberikan hasil berikut:
demo langsung kod ini boleh didapati dalam demo codepen ini.<span>var context = {"language" : "<h3>Handlebars</h3>","adjective": "<h3>awesome</h3>"}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukI am learning <span><span><span><h3</span>></span>Handlebars<span><span></h3</span>></span>. It is <span><span><h3</span>></span>awesome<span><span></h3</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukPertama, anda perlu memasang hendal di seluruh dunia dengan menggunakan hendal pemasangan NPM -G. Sila, pastikan templat yang berbeza ditulis dalam fail berasingan dengan nama fail yang berbeza dan dengan sambungan .handlebars (contohnya demo.handlebars). Tidak perlu menggunakan tag
di dalam fail tersebut. Sekarang simpan semua fail templat dalam satu folder bernama templat. Anda boleh menggunakan mana -mana nama folder yang anda kehendaki tetapi jika anda berbuat demikian, jangan lupa untuk menukar arahan berikut dengan sewajarnya. Oleh itu, buka terminal dan laksanakan perintah:
Perintah ini akan menghasilkan fail bernama templatescompiled.js yang mengandungi semua templat yang disusun. Pengkompil akan memasukkan templat dalam handlebars.templates. Jika fail input adalah demo.handlebars, maka ia akan dimasukkan ke handlebars.templates.demo
Sekarang kita perlu memasukkan templatescompiled.js dalam fail HTML sebagai skrip biasa. Adalah penting untuk diperhatikan bahawa kita tidak perlu memuatkan keseluruhan perpustakaan hendal kerana pengkompil itu sendiri tidak diperlukan lagi. Kita boleh menggunakan "runtime" yang lebih kecil sebaliknya:<span><!-- I am learning {{language}} -->I am learning {{language}}. It is {{!--adjective--}}</span>
Salin selepas log masukSalin selepas log masuk<span><span><span><script</span> src<span>="/path/to/handlebars.min.js"</span>></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuksekarang kita boleh menggunakan templat yang pada asalnya hadir dalam demo.handlebars dengan menggunakan kod berikut:
output akhir akan menjadi seperti berikut:<span><span><span><script</span> id<span>="handlebars-demo"</span> type<span>="text/x-handlebars-template"</span>></span><span><span><div>My name is {{name}}. I am a {{occupation}}.</div></span></span><span><span></script</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span>// Retrieve the template data from the HTML (jQuery is used here).var template = $('#handlebars-demo').html(); </span><span>// Compile the template data into a functionvar templateScript = Handlebars.compile(template); </span><span>var context = { "name" : "Ritesh Kumar", "occupation" : "developer" }; </span><span>// html = 'My name is Ritesh Kumar. I am a developer.'var html = templateScript(context); </span><span>// Insert the HTML code into the page$(document.body).append(html);</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukKod demo precompilation ini boleh didapati di GitHub.
KESIMPULAN
Dalam artikel ini kita telah membincangkan konsep asas hendal. Kami juga mengkaji fungsi dan sintaks yang sering digunakan. Saya harap anda menikmati tutorial ini dan anda akan menggunakan demo yang disertakan untuk memahami topik ini. Saya tidak sabar untuk membaca komen anda.Apakah template hendal?
Templat Handlebars adalah struktur berasaskan teks yang mentakrifkan susun atur dan struktur kandungan HTML dinamik dalam pembangunan web. Handlebars adalah perpustakaan templating JavaScript yang membolehkan anda membuat templat ini, menjadikannya lebih mudah untuk menghasilkan kandungan HTML berdasarkan data. Handlebar ini disertakan dalam pendakap keriting berganda {{}}. Contohnya:
Hello, {{name}}!
Dalam template handlebar mudah ini, {{name}} adalah pemegang tempat untuk pembolehubah yang disebut "Nama . " Apabila anda membuat templat ini dengan data tertentu, seperti {name: "John"}, hendal menggantikan {{name}} dengan nilai data yang sepadan:
Hello, John!
templat hendal sangat berguna untuk mewujudkan kandungan HTML yang konsisten dan dikekalkan, kerana mereka memisahkan persembahan (struktur HTML) dari data, menjadikannya lebih mudah untuk mengemaskini dan menggunakan semula template di seluruh aplikasi web anda. Handlebars menawarkan ciri -ciri yang lebih canggih, menjadikannya sesuai untuk keperluan dan projek templat yang kompleks di mana ekosistem dan sokongan komuniti yang lebih besar adalah penting. Misai, sebaliknya, lebih mudah dan mengikuti falsafah "kurang logik", menjadikannya pilihan yang baik untuk projek-projek yang mengutamakan kesederhanaan dan mudah alih di pelbagai bahasa pengaturcaraan.
Atas ialah kandungan terperinci Panduan pemula ' s ke hendal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Terokai pelaksanaan fungsi seretan panel dan drop panel seperti VSCode di bahagian depan. Dalam pembangunan front-end, bagaimana untuk melaksanakan vscode seperti ...
