Kami menghasilkan bidang input berdasarkan tabel. Selama ini header (judul, unit) konstan, tetapi mungkin ada beberapa kolom dengan tipe input yang sama (yang paling sederhana adalah a , tetapi mungkin juga ada svgs dinamis), tetapi konten yang bervariasi.

Kami ingin membuat konten tds secara dinamis dan menambahkannya ke template saat merender.

Masukan ke template adalah:

[{RowId: 'bla', RowUnit: '-', RowField: pug.compile('input')},
 {RowId: 'blub', RowUnit: 'm', RowField: pug.compile('span')}]

Templatenya terlihat seperti ini:

mixin addrow(rowdef)
    tr(id= rowdef.RowId)
        th= rowdef.RowId

        td()
            #{rowdef.RowField()}

        th= "[" + rowdef.RowUnit + "]"

table(class="dialogcontents")
    each rowdef in Contents
        +addrow(rowdef)

button(class="okbtn") Ok
button(class="cancelbtn") Cancel

Tetapi kompilasi di atas seperti ini:

<table class="dialogcontents">
    <tr id="bla">
        <th>bla</th>
        <td><<input/>></<input/>></td>
             ^--- It looks like the tagname is "<input/>", so the function is compiled and applied as string then
        <th>[-]</th>
    </tr>
    <tr id="blub">
        <th>blub</th>
        <td><<span></span>></<span></span>></td>
             ^--- as above
        <th>[m]</th>
    </tr>
</table> 
<button class="okbtn">Ok</button>
<button class="cancelbtn">Cancel</button>

Secara keseluruhan, fungsi yang dikompilasi tampaknya dipanggil dua kali. Bolehkah saya dengan hormat meminta saran?

0
hsc 6 Agustus 2019, 08:46

1 menjawab

Jawaban Terbaik

Saya tidak yakin apa tujuan Anda yang lebih luas, tetapi jika Anda ingin menggunakan tag yang ditentukan di lokal Anda, Anda dapat menetapkan RowField: 'span' dan kemudian menggunakan interpolasi tag:

#{rowdef.RowField} This is my span.

Yang akan membuat:

<span>This is my span.</span>
0
Sean 6 Agustus 2019, 21:21