Esempio di creazione di un widget ThingWorx personalizzato
La presente sezione illustra come creare un widget personalizzato e gestirlo in fase di esecuzione.
Codice Mashup Builder
Per poter utilizzare Mashup Builder, il file <nomewidget>.ide.js deve implementare le funzioni del widget. Per ulteriori informazioni sulle funzioni disponibili per i widget, vedere la sezione relativa alle API Mashup Builder disponibili per i widget. I widget possono dichiarare proprietà, servizi ed eventi nelle funzioni.
Il codice di esempio riportato di seguito mostra come creare un widget. Il nome del widget è MyWidget e presenta una proprietà stringa associabile denominata DisplayText.
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;
};
};
Codice esecuzione
Per gestire il widget in fase di esecuzione, i metodi del widget devono effettuare le operazioni descritte di seguito.
Eseguire il rendering dell'HTML in fase di esecuzione
Impostare le associazioni dopo il rendering dell'HTML
Gestire gli aggiornamenti delle proprietà
Il codice di esempio riportato di seguito mostra un file <widgetname>.runtime.js per il widget personalizzato creato in Codice Mashup Builder.
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);
}
};
};
Funzionalità aggiuntive disponibili nei widget
Nei widget è possibile aggiungere le funzionalità riportate di seguito.
I servizi possono essere associati agli eventi. Ad esempio:
Si fa clic su un pulsante.
Sono state modificate le righe selezionate.
È stato completato un servizio.
Gli eventi possono essere associati a vari servizi. Ad esempio, quando si chiama un servizio, si passa a un mashup.
Le proprietà del widget possono presentare gli elementi elencati di seguito.
Dati associati (in entrata). I dati in entrata vengono specificati come "isBindingTarget": true nel codice di definizione del widget.
Dati restituiti a ThingWorx (in uscita). I dati in uscita vengono specificati come "isbindingSource": true nel codice di definizione del widget.
Nel codice di esempio che segue user_input_for_name è infatti un input utente, ovvero un dato in uscita.
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
}
}
};
};
È possibile accedere a tutte le funzionalità di JavaScript e HTML nel codice del widget in fase di esecuzione.
È stato utile?