Create Custom Controls
Integration within the HTML
<div id="custom_control_id" class="pdf-hide" data-win-control="HFFormdefinition.SomeNamespace.CustomControlName"
data-win-options="{
prop1: 'value1'
}">
</div>
Note
IMPORTANT FACTS
-
All registered event handlers have to get deregistered (dispose pattern) when the form is left. Therefore you have to implement your
dispose()
method within your control. -
It is recommended that all custom controls derive from the HybridForms BaseControl
HybridForms.API.UIControls.BaseControl
-
This control adds the
win-disposable
class to the html markup and calls the dispose method when leaving the page. -
Override the
dispose
-method where to remove all previously registered event handlers.
-
Coding examples
- Example of a simple custom control that derives from BaseControl
<div id="derived_custom_control"
data-win-control="HFFormdefinition.SomeNamespace.CustomControl"
data-win-options="{
publicProp1: 'foo'
}">
</div>
export class CustomControl extends HybridForms.API.UIControls.BaseControl {
// instance properties
private onRendered: () => void;
public publicProp1: string;
// instance methods
constructor(element, options) {
super(element, options);
}
protected createControl(): Promise<void> { // will be called by base class
console.log('createControl');
// return a promise here, when all ui relevant work is done!
return Promise.resolve();
}
protected createView() { // will be called by base class
// get called on PDF creation
}
protected registerEvents() { // will be called by base class
// registerEvents here
console.log('registerEvents');
this.onRendered = () => {
console.log('form is rendered and ready');
};
HybridForms.API.Page.addEventListener('rendered', this.onRendered);
HybridForms.API.Page.addEventListener('viewrendered', this.onRendered);
}
public dispose() {
if (this.disposed) {
return;
}
// dispose registered events here
if (this.onRendered) {
HybridForms.API.Page.removeEventListener('rendered', this.onRendered);
HybridForms.API.Page.removeEventListener('viewrendered', this.onRendered);
}
this.disposed = true;
}
public static staticMethod() {
// static method
}
}