(find the English version here: https://www.slideshare.net/andreaskunz/ui5-controls-ui5con-2016)
Enhanced German-language version of the previously shown control development slides.
Das Konzept von UI5-Controls wird erklärt und anhand einfacher Code-Beispiele und Live-Demos veranschaulicht.
2. Warum?
Umfrage auf http://scn.sap.com/polls/2503:
„Wie groß ist der Anteil an selbstgeschriebenen Controls in
Ihren Anwendungen?“ (203 Antworten)
> 50% stimmten für „mehr als 5% eigene Controls”
< 20% benutzen überhaupt keine eigenen Controls
4. Alles, was man sieht…
…ist ein Control.
529 Controls enthalten in SAPUI5 1.34 (270 in OpenUI5)
*) Einschließlich abstrakter Basisklassen, doppelt vorhandener und anderer Controls, die nicht allzu wichtig sind.
*)
7. Hä? Ich will Code sehen!
• Ein einfaches „Quadrat“-Control:
http://jsbin.com/openui5-control/2/edit
8. Das war zu einfach…
• Ok, ein Google-Map-Control:
http://jsbin.com/xavuhi/1/edit
• Data-Binding, Supportwerkzeuge, ...
alles funktioniert automatisch.
9. Äh… wie funktioniert das?
1. Touch Event auf dem Slider
• Der Slider setzt den neuen Wert gemäß der Position
2. ManagedObject
• Generische Setter/Getter verbinden mit Data Binding
3. Model Update
=> Kleines Päuschen!
4. Invalidierung
=> Kleines Päuschen!
5. Der Renderer wird gerufen
6. Das neue HTML wird ins DOM gehängt
10. Total flüssig…
• Selbst kompletes Neu-Rendern ist abartig schnell!
• Meistens.
• Lässt sich verhindern durch Überschreiben von Settern etc. (siehe
http://jsbin.com/fosiya/edit)
setLatitude: function(lat) {
this.setProperty("latitude", lat, true); // KEIN Neu-Rendern!
if (this._map) {
this._map.panTo(new google.maps.LatLng(lat, this.getLongitude()));
}
return this;
}
11. Und wie geht das mit dem Support-Tool?
var komischesDing = sap.ui.getCore().byId("__map0");
komischesDing.getMetadata().getName();
metaData.getProperties()["latitude"];
12. Besondere Methoden
• init, exit
• onBeforeRendering, onAfterRendering
• on…. (Events wie „onclick“)
• Nur für die meistbenötigten Events, ansonsten: jQuery.on(…)
• UI5 Event Dispatching
• UI5 Maus-/Touch-Emulierung
• Browser- und Control-Events
• my.Square mit Event: http://jsbin.com/zuhiri/1/edit
13. Rendering-Details
• Aufgabe: HTML erzeugen, das den aktuellen Zustand darstellt
• EIN Wurzelelement, writeControlData(…)
• Konventionen
• Renderer-Funktionen
• Escaping (XSS!)
• Container-Controls rendern ihre Kinder
• my.Square als Container: http://jsbin.com/zuhiri/2/edit?html,output
14. Und das CSS?
• Öhm….. irgendwo ablegen und laden…
• Oder es gleich richtig machen: Libraries! (Grunt-Build)
• LESS
https://github.com/SAP/openui5/blob/master/docs/controllibraries.md
15. Für Fortgeschrittene
• Accessibility:
• Tastaturbedienung (ItemNavigation!)
• ARIA
• „High Contrast Black“ Theme
• Right-to-Left
• ResizeListener
• Popups
• my.Square als Popup: http://jsbin.com/zuhiri/3/edit
• Unit Tests
16. Zum Nachlesen
• UI5 SDK:
• Developing Content:
• Developing Controls
• Control Development Guidelines
• …
• Walkthrough Tutorial, Schritt 34
• GitHub:
• How to build Control Libraries (es wird Grunt benötigt, daher nicht im SDK dokumentiert)
• UI5 Slack Chat mit den Räumen #customcontrol und #controlplatform
• Anmelden auf http://slackui5invite.herokuapp.com/
• Git Repository für Controls aus der Community:
https://github.com/slackUI5Controls
• Diese Folien (Link-Übersicht auf http://jsbin.com/daqozo)