Question
How can I add a web-type field (as the one in the [Communication options] detail) that would open in a new tab when I click it?
Answer
To turm a usual text field into a web link, develop the diff property of this field with the following code:
{ "operation": "insert", "name": "AdditionalExpenses", "values": { // --> "showValueAsLink": true, "controlConfig": { "enabled": true, "href": { "bindTo": "getAdditionalExpensesLink" }, "linkclick": { "bindTo": "onExternalLinkClick" } }, // <-- "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 3, "layoutName": "Tab07720f4eTabLabelGridLayout691629ea" }, "labelConfig": {}, "enabled": true, "bindTo": "AdditionalExpenses" }, "parentName": "Tab07720f4eTabLabelGridLayout691629ea", "propertyName": "items", "index": 5 },
Add the following code to the methods property:
methods: { getAdditionalExpensesLink: function() { return this.getLink(this.get("AdditionalExpenses")); }, onExternalLinkClick: function() { return; }, getLink: function(value) { if (Terrasoft.isUrl(value)) { return { url: value, caption: value }; } } },
After this, the field becomes a link if it is specified in the correct web format or copied from browser. If you click the "Open in a new tab" option from the context menu, it will be opened in a new tab, if you left-click it - it will open in the current tab:
To open the link in a new window, develop the onExternalLinkClick() method:
onExternalLinkClick: function() { var value = this.get("AdditionalExpenses"); if (!Ext.isEmpty(value)) { window.open(value, "_blank"); } return false; },