Beispiel für das Erstellen eines angepassten ThingWorx Widgets
In diesem Abschnitt wird beschrieben, wie ein angepasstes Widget erstellt und zur Laufzeit verarbeitet wird.
Mashup Builder-Code
Die Datei
<Widget-Name>.ide.js muss Widget-Funktionen implementieren, um mit Mashup Builder zu arbeiten. Weitere Informationen zu den für Widgets verfügbaren Funktionen finden Sie im Abschnitt
Funktionen zum Anpassen von ThingWorx Widgets. Widgets können Widget-Eigenschaften, Dienste und Ereignisse in den Funktionen deklarieren.
Der folgende Beispielcode zeigt, wie ein Widget erstellt wird. Der Name des Widgets ist MyWidget, das eine bindbare Zeichenfolgeneigenschaft namens DisplayText hat.
TW.IDE.Widgets.mywidget = function () {
this.widgetIconUrl = function() {
return "../Common/extensions/MyExtension/ui/" +
"mywidget/mywidget.ide.png";
};
this.widgetProperties = function () {
return {
name : "My Widget",
description : "An example widget.",
category : ["Common"],
properties : {
DisplayText: {
baseType: "STRING",
defaultValue: "Hello, World!",
isBindingTarget: true
}
}
}
};
this.renderHtml = function () {
var mytext = this.getProperty('MyWidget Property');
var config = {
text: mytext
}
var widgetTemplate = _.template(
'<div class="widget-content widget-mywidget">' +
'<span class="DisplayText"><%- text %></span>' +
'</div>'
);
return widgetTemplate(config);
};
this.afterSetProperty = function (name, value) {
return true;
};
};
Laufzeitcode
Um das Widget zur Laufzeit zu verarbeiten, müssen die Widget-Methoden folgende Schritte ausführen:
• HTML zur Laufzeit rendern
• Bindungen nach dem Rendern der HTML einrichten
• Eigenschaftsaktualisierungen verarbeiten
Der folgende Beispielcode zeigt die Datei
<widgetname>.runtime.js für das angepasste Widget, das im
Mashup Builder-Code erstellt wurde.
TW.Runtime.Widgets.mywidget = function () {
var valueElem;
this.renderHtml = function () {
var mytext = this.getProperty('MyWidget Property');
var config = {
text: mytext
}
var widgetTemplate = _.template(
'<div class="widget-content widget-mywidget">' +
'<span class="DisplayText"><%- text %></span>' +
'</div>'
);
return widgetTemplate(config);
};
this.afterRender = function () {
valueElem = this.jqElement.find(".DisplayText");
valueElem.text(this.getProperty("DisplayText"));
};
this.updateProperty = function (updatePropertyInfo) {
if (updatePropertyInfo.TargetProperty === "DisplayText") {
valueElem.text(updatePropertyInfo.SinglePropertyValue);
this.setProperty("DisplayText",
updatePropertyInfo.SinglePropertyValue);
}
};
};
Zusätzliche Funktionen in Widgets
Sie können die folgenden Funktionen in Ihren Widgets hinzufügen:
• Dienste können an Ereignisse gebunden sein. Beispiel:
◦ Es wird auf eine Schaltfläche geklickt.
◦ Ausgewählte Zeilen haben sich geändert.
◦ Ein Dienst wurde abgeschlossen.
• Ereignisse können an verschiedene Dienste gebunden sein. Wenn Sie beispielsweise einen Dienst aufrufen, navigiert er zu einem Mashup.
• Widget-Eigenschaften können Folgendes aufweisen:
◦ Daten, die an sie gebunden sind (eingehend). Die eingehenden Daten werden als "isBindingTarget": true im Widget-Definitionscode angegeben.
◦ Daten, die an ThingWorx zurückgesendet werden (ausgehend). Die ausgehenden Daten werden als "isbindingSource": true im Widget-Definitionscode angegeben.
Im folgenden Beispielcode ist user_input_for_name beispielsweise eine Benutzereingabe, bei der es sich um ausgehende Daten handelt.
this.widgetProperties = function () {
return {
"name": "user_input_for_name",
"description": "Sample widget that returns a user input",
"category": ['Common'],
"properties": {
"DisplayText": {
"baseType": "STRING",
"defaultValue": "My First Widget!",
"isBindingTarget": true,
"isbindingSource": true
}
}
};
};
Sie können zur Laufzeit auf alle Funktionen von JavaScript und HTML in Ihrem Widget-Code zugreifen.