Setelah memutar otak dengan banyak trial and error dan penelitian, akhirnya saya menemukan masalahnya. Saya harus meneruskan JSON sebagai parameter bernama dalam panggilan tampilan utama ke parsial. Sintaksnya seharusnya:
{{> jeff-modal <anyVariableName> = getJsonContext }}
Saya menyelesaikannya dan membuat {{> jeff-modal }}
generik saya menerima daftar tombol, yang dapat disesuaikan.
Modal sekarang berguna sebagai modal sederhana yang umum, dapat disesuaikan, yang dapat dirender sebagai sebagian dari dalam tampilan apa pun untuk mengharuskan pengguna menekan salah satu dari x-number tombol untuk membuat pilihan.
Contoh
Tampilan utama (panggilan) memiliki daftar entri jurnal (transaksi) dalam urutan tanggal. Untuk setiap transaksi, terdapat ikon "hapus" yang dapat diklik. Modal terbuka ketika pengguna menekan ikon. Saat modal dibuka, kita perlu mengetahui transaksi mana yang akan dihapus. Kami memiliki _id
-nya.
Setelah menyiapkan tabel dan kolom di <html>
dan memulai iterator {{# each }}
, berikut adalah cara ikon "hapus" diatur untuk setiap transaksi. Perhatikan bagaimana nilai data-id
diatur ke properti _id
transaksi:
<!-- table stuff up here -->
{{# each transactions}}
<tr class="journal-entry-row">
<!-- some `<td>`'s -->
<span class="journalData">
<a href='/id#' class="open-deleteDialog"
data-id="{{this._id}}" data-backdrop="static"
data-toggle="modal" data-target="#deleteModal">
<span class="material-icons md-24 md-dark">delete</span>
</a>
</span>
<!-- more table stuff -->
{{/ each }}
Ikon material di atas dapat ditemukan di sini: https://material.io/icons/
"hapus" adalah tempat sampah.
Di bawah ini adalah javascript untuk mengatur onclick untuk semua tong sampah. Perhatikan bagaimana _id
transaksi melakukan perjalanan dari <html>
ke javascript melalui data-id
(di atas). (Saya pikir itu cukup pintar, siapa pun yang memikirkannya.)
Selain itu, karena modal khusus kita diberi id
dari "hapus-formulir", kita bisa membuatnya menyetel modal <form>
action
.
Terakhir, sedikit CSS ditambahkan untuk menyorot baris yang dihapus.
$(document).on("click", ".open-deleteDialog", function () {
var myTransactionId = $(this).data('id');
// Set form action to call delete with _id parameter
$("#delete-form").attr("action", "/transaction/delete?_id=" + myTransactionId );
// Highlight the selected row.
$(this).closest(".journal-entry-row").addClass("table-warning");
});
Sekarang, mari kembali ke tampilan panggilan setelah akhir <table>
. Di sinilah modal dipanggil dalam blok pembantu setang (tetapi hanya ketika tempat sampah diklik):
<!-- The Delete modal -->
{{# getJsonContext '
{
"id": "deleteModal",
"title": "Are you sure?",
"formId": "delete-form",
"body": "Press \"Yes\" to delete this record. Press \"No\" to cancel.",
"buttons":
[
{ "type": "submit", "onclick": "", "class": "btn btn-primary", "text": "Yes" },
{ "type": "button", "onclick": "removeHighlightEffect()", "class": "btn btn-secondary", "dataDismiss": "modal", "text": "No" }
]
}'
}}
{{> jeff-modal options = getJsonContext }}
{{/ getJsonContext }}
Inilah pembantunya:
getJsonContext: function(data, options) {
let jsonReturn = options.fn(JSON.parse(data));
return jsonReturn;
},
Terakhir, sebagian {{> jeff-modal }}
:
<div class="modal fade" id="{{ id }}">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header bg-light">
<h4 class="modal-title">{{ title }}</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<!-- Form -->
<form id="{{ formId }}" method="post">
<!-- Modal body -->
<div class="modal-body">
{{ body }}
</div>
<!-- Modal footer -->
<div class="modal-footer rounded-bottom bg-light">
{{# each buttons }}
<button type = "{{ type }}" onclick = "{{ onclick }}" class = "{{ class }}" data-dismiss = "{{ dataDismiss }}" >{{ text }}</button>
{{/ each }}
</div>
</form>
</div>
</div>
</div>
Saya tidak yakin apakah saya dapat memanggil beberapa contoh modal ini dari tampilan yang sama dengan judul, isi, tombol yang berbeda, dll. Beberapa penyesuaian mungkin diperlukan untuk itu, dan saya tidak akan mengkhawatirkannya sampai diperlukan.
person
Jeff Matthews
schedule
11.12.2017
getJsonContext
pembantu dalam jawaban yang Anda rujuk. Ada perbedaan yang sangat besar antarareturn options.fn(JSON.parse(data));
dalam contoh itu dan pernyataan return di contoh Anda. - person 76484   schedule 11.12.2017