Untuk membuat formulir backend melalui ui_component, saya mendefinisikan berikut ini di file konfigurasi untuk menampilkan tombol simpan dan simpanAndContinue Button
<item name="buttons" xsi:type="array">
<item name="save" xsi:type="string">namespace\module\Block\Adminhtml\Edit\SaveButton</item>
<item name="save_and_continue" xsi:type="string">namespace\module\Block\Adminhtml\Edit\SaveAndContinueButton</item>
</item>
Masing-masing, dua file SaveButton.php
dan SaveAndContinueButton.php
dibuat dan keduanya diimplementasikanButtonProviderInterface
Seperti yang saya tahu, tombol terutama ditampilkan dari suatu getButtonData
fungsi. LihatSaveAndContinueButton.php
public function getButtonData()
{
$TodoItemId = $this->getTodoItemId();
$data = [];
if ($TodoItemId) {
$data = [
'label' => __('Save and Continue Edit'),
'class' => 'save',
'data_attribute' => [
'mage-init' => [
'button' => ['event' => 'saveAndContinueEdit'],
],
],
'sort_order' => 80,
];
}
return $data;
}
Di data_attribute
situlah saya tidak mengerti. Bagaimana cara mengetahui file mana yang akan menangani permintaan simpan?
Jika kami memeriksa SaveButton.php
, Kami melihat
$data = [
'label' => __('Save TodoItem'),
'class' => 'save primary',
'data_attribute' => [
'mage-init' => ['button' => ['event' => 'save']],
'form-role' => 'save',
],
'sort_order' => 90,
];
Saya tahu di file konfigurasi ui_component, ada
<item name="submit_url" xsi:type="url" path="path/to/save"/>
Kedua aksi berhasil mengeksekusi Save.php
file yang sama dan masuk akal. Yang paling membingungkan saya adalah data_attribute
dan bagaimana cara SaveAndContinueButton
melewati parameter " back
" sehingga ia tahu untuk tetap di halaman yang sama alih-alih pergi ke kisi (biasanya kisi adalah titik masuk suatu formulir, alias sunting halaman).
Jika kita melihat lagi deleteButton
, itu pemandangan lain
$data = [
'label' => __('Delete'),
'class' => 'delete',
'on_click' => 'deleteConfirm(\'' . __(
'Are you sure you want to do this?'
) . '\', \'' . $this->getDeleteUrl() . '\')',
'sort_order' => 20,
];
Ini secara langsung mengeksekusi event onClick JavaScript. Setiap ide / saran akan dihargai. Terima kasih
Satu pertanyaan lagi: apa bedanya data_attribute
dan on_click
? atau menguntungkan satu sama lain?
Jawaban:
Saya tidak punya penjelasan lengkap, tapi saya punya ide.
Semua elemen yang diberikan dengan
mage-init
kehendak / harus ditangani oleh beberapa kode javascript.Anda menautkan tombol-tombol ini ke formulir, dan formulir ditangani oleh file js ini di
lib/web/mage/backend/form.js
mana widget jquery ui dibuat.Ini adalah opsi untuk widget
Anda dapat melihat
saveAndContinueEdit
di sana di suatu tempat di dalamhandlersData
.Mencari penggunaan
handlersData
Anda berakhir di_beforeSubmit
tempat beberapa keajaiban terjadi (saya tidak benar-benar mengerti segalanya di sana), dan pada satu titik_processData
disebut.Pindah ke
_processData
Anda akan melihat sesuatu seperti iniini berarti bahwa
action
formulir diubah berdasarkan tombol yang ditekan.yang
_getActionUrl
fungsi terlihat seperti iniAnda bisa lihat di sana
data.args
terlibat. Variabel yang sama dalam opsi widget untuksaveAndContinueEdit
.Kesimpulan: Ketika Anda mengatur peran ke
saveAndContinueEdit
tombol kirim, aksi formulir diubah melalui js danback/edit
ditambahkan ke url.on_click
ditransformasikan keonclick
acara tersebut dan hanya disebut.Jujur saya tidak tahu mengapa ada 2 cara untuk melakukan ini. Mungkin
delete
tindakan belum di refactored.sumber