Você precisa "criar" * seu próprio componente de interface do usuário. Você pode fazer isso estendendo o componente da interface do usuário da data.
# 1 Adicione o XML ao seu formulário
Adicione o campo ao fieldset. Neste exemplo, o componente que iremos criar é chamado time
. Observe que você pode declarar um template
no XML a seguir. No entanto, ele não será realmente bom, pois é o modelo XHTML que envolve o modelo Knockout que faz a renderização real. Existem outros nós que você pode declarar aqui como validação.
<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 Crie o componente da interface do usuário
// 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'
}
});
});
Algumas notas sobre o Javascript acima:
elementTmpl
não é necessário. No entanto, se você deseja personalizar o modelo (atualmente module-ui/view/base/web/templates/form/element/date.html
), basta criar seu próprio modelo e referenciá-lo elementTmpl
.
Existem mais opções para a entrada. Você pode encontrar mais informações sobre eles: http://trentrichardson.com/examples/timepicker/#tp-options . No código, há uma lista de todos os padrões aqui:/lib/web/jquery/jquery-ui-timepicker-addon.js
Resultado final:
- Neste ponto, não acredito que seja possível declarar seu próprio componente de interface do usuário de maneira semelhante à de
definitions.xml
. No entanto, você pode estendê- los com o mínimo esforço. (E, se houver uma maneira, por favor me avise).