Necesita "crear" * su propio componente de interfaz de usuario. Puede hacerlo extendiendo el Componente de IU de fecha.
# 1 Agregue el XML a su formulario
Agregue el campo al conjunto de campos. En este ejemplo, se llama al componente que crearemos time
. Tenga en cuenta que puede declarar un template
en el siguiente XML. Sin embargo, realmente no servirá de nada, ya que es la plantilla XHTML la que envolverá la plantilla Knockout que realiza el renderizado real. Hay otros nodos que puede declarar aquí como validación.
<field name="time_field">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Time</item>
<item name="dataType" xsi:type="string">text</item>
<item name="formElement" xsi:type="string">date</item>
<item name="dataScope" xsi:type="string">time_field</item>
<item name="component" xsi:type="string">Your_Module/js/form/element/time</item>
</item>
</argument>
</field>
# 2 Crear el componente de la interfaz de usuario
// app/code/Your/Module/view/adminhtml/web/js/form/element/time.js
define([
'Magento_Ui/js/form/element/date'
], function(Date) {
'use strict';
return Date.extend({
defaults: {
options: {
showsDate: false,
showsTime: true,
timeOnly: true
},
elementTmpl: 'ui/form/element/date'
}
});
});
Algunas notas sobre el Javascript anterior:
elementTmpl
no es necesario. Sin embargo, si desea personalizar la plantilla (actualmente module-ui/view/base/web/templates/form/element/date.html
), simplemente cree su propia plantilla y haga referencia a ella elementTmpl
.
Hay más opciones para la entrada. Puede encontrar más información sobre ellos: http://trentrichardson.com/examples/timepicker/#tp-options . En el código, hay una lista de todos los valores predeterminados aquí:/lib/web/jquery/jquery-ui-timepicker-addon.js
Resultado final:
- En este punto, no creo que sea posible declarar su propio Componente UI de una manera similar a la de
definitions.xml
. Sin embargo, puede extenderlos con un mínimo esfuerzo. (Y, si hay alguna manera, hágamelo saber).