Um ein Backend-Formular über ui_component zu erstellen, definiere ich Folgendes in der Konfigurationsdatei, um die Schaltflächen save und saveAndContinue Button anzuzeigen
<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>
Beziehungsweise, zwei Dateien SaveButton.phpund SaveAndContinueButton.phperstellt und beide implementierenButtonProviderInterface
Wie ich weiß, wird die Schaltfläche hauptsächlich aus einer getButtonDataFunktion gerendert . SehenSaveAndContinueButton.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;
}
Das data_attributeist, wo ich das nicht verstehe. Woher weiß es, welche Datei die Speicheranforderung verarbeiten soll?
Wenn wir das überprüfen SaveButton.php, haben wir gesehen
$data = [
'label' => __('Save TodoItem'),
'class' => 'save primary',
'data_attribute' => [
'mage-init' => ['button' => ['event' => 'save']],
'form-role' => 'save',
],
'sort_order' => 90,
];
Ich weiß, in der Konfigurationsdatei ui_component gibt es
<item name="submit_url" xsi:type="url" path="path/to/save"/>
Beide Aktionen führen erfolgreich dieselbe Save.phpDatei aus und es ist sinnvoll. Was mich sehr verwirrt, ist data_attributeund wie wird der SaveAndContinueButton Parameter " back" übergeben, damit er auf derselben Seite bleibt, anstatt zum Raster zu wechseln (normalerweise ist das Raster der Einstiegspunkt eines Formulars, auch als Bearbeitungsseite bezeichnet).
Wenn wir uns das noch einmal ansehen deleteButton, ist es eine andere Landschaft
$data = [
'label' => __('Delete'),
'class' => 'delete',
'on_click' => 'deleteConfirm(\'' . __(
'Are you sure you want to do this?'
) . '\', \'' . $this->getDeleteUrl() . '\')',
'sort_order' => 20,
];
Das onClick JavaScript-Ereignis wird direkt ausgeführt. Jede Idee / Vorschlag wird geschätzt. Vielen Dank
Noch eine Frage: Was ist der Unterschied zu data_attributeund on_click? oder einen Vorteil gegenüber dem anderen?