我想只在数据中的文本等于特定字符串时才创建一些textBlock。 如果没有 - 我想只创建一个textBlock。
var template = GO(go.Node, "Auto",{desiredSize: new go.Size(width, height) },
GO(go.Shape, shapeMap.getValue(shape), new go.Binding("fill", "fill")),
( ???? .includes("[UMS]")) ?
GO(go.Panel, "Vertical",
GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart1")),
GO(go.TextBlock,{text: "[UMS]", font: "7pt serif", click: function(e, obj) {window.open("https://" + obj.part.data.key + ":8090")}}, new go.Binding("stroke", "color")),
GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart2")))
:
GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart1"))
);
如果包含或不包含data.text,如何对其进行测试?
(我知道如何在函数内部获取它:click:function(e,obj){return obj.part.data.key}
或如何声明它 - 使用Binding - 因此数据将是每个节点而不是每个模板。 但是在模板里面的代码??)
答案 0 :(得分:1)
您可以添加一个数据绑定,将TextBlock
或Panel
的可见性绑定到data.text。这是一个这样的例子:
new go.Binding("visible", "text", function(textvalue) {
return (textvalue.indexOf("[UMS]") >= 0);
})
在该示例中,如果文本不包含"[UMS]"
,则具有此绑定的GraphObject将不可见(它将不会显示,也不会占用空间)。
以下是一个完整的示例:http://codepen.io/simonsarris/pen/jPzyoa?editors=001
后代的整个模板:
myDiagram.nodeTemplate =
$(go.Node, "Vertical",
new go.Binding('background', 'color'),
$(go.TextBlock,
{ margin: 3 },
new go.Binding("text", "key")),
// This textblock will be hidden if the data.text does not contain "three"
$(go.TextBlock,
{ margin: 3 },
new go.Binding("text", "text"),
new go.Binding("visible", "text", function(textvalue) {
return (textvalue.indexOf('three') >= 0);
})
)
);
您可以在此处详细了解数据绑定和转化功能:http://gojs.net/latest/intro/dataBinding.html