Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core für Entwickler > agorum.composite.form
Diese Dokumentation beschreibt den Rumpf eines Elements.
Sie müssen das Element als Widget registrieren, um es innerhalb einer form verwenden zu können.
/* global parameters, jshint unused: true */
let aguila = require('common/aguila');
let acfFactory = require('/agorum/roi/customers/agorum.composite.form/js/aguila/Libraries/form-factory-input');
let field;
// factory definition
let factoryData = acfFactory.elementInput({
// pass parameters from widget to the factory
parameters: parameters,
// add custom properties
properties: [
'myProperty'
],
// builder function for the edit-widget
build: build,
// optional builder function for the view-widget
// if not defined, a normal textDisplay is used
buildView: buildView,
// view function for displaying the value as text (for readOnly mode)
viewStringify: viewStringify,
// optional handle for value conversions, before passing as value to the edit
// widget of this element
valueHandler: valueHandler
});
// get created widget
let formWidget = factoryData.widget;
// Add custom event listener: own properties + value
formWidget.on('myPropertyChanged', myProperty => {
// do something ...
});
// view function for displaying the value as text (for readOnly mode)
// convert the value to a string, that should be used for displaying
// this function may also return a promise, that resolves with the value as
// parameter, if the value transformation is taking longer
function viewStringify(value) {
return '' + value;
}
// build the edit field.
// has to return a widget
function build(properties) {
// return a widget. This widget needs a property value
// you can also create a widget containing multiple fields, but the
// main widget itself
// has to handle the value: e.g. a date time field, consisting of different
// input fields should return and accept a date as value
field = aguila.create({
type: 'agorum.textInput',
label: properties.label,
value: properties.value
});
// if you have a flexible element, that has no own height, you have to
// define flexible = true in the widget definition above
return field;
}
// optional builder for the view widget
// if not defined, a normal textDisplay is used
function buildView(properties) {
field = aguila.create({
type: 'agorum.htmlDisplay',
value: properties.value,
flexible: true
});
return field;
}
// optional handler for value conversions, before passing as value to the edit
// widget of this element it returns either the converted value or a promise,
// that resolves with the value as parameter
let valueHandlerRun;
function valueHandler(value) {
valueHandlerRun = {};
let myRun = valueHandlerRun;
return new Promise((resolve) => {
aguila.fork(() => {
// do something that takes long time
return 'newValue...' + value;
}).then(newvalue => {
// resolve only the latest call to valueHandler, cause this is
// threaded, it could be,
// that this resolve is called multiple times
if (myRun === valueHandlerRun) {
resolve(newvalue);
}
});
});
}
formWidget;