GoJS:如何更改节点填充颜色?
GoJS: How can I change Node fill color?
我正在使用 GoJS 制作图表。
我的图表配置(来自官方文档的示例):
function init() {
//......
// define the Node template
myDiagram.nodeTemplate =
$(go.Node, "Auto",
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
// define the node's outer shape, which will surround the TextBlock
$(go.Shape, "RoundedRectangle",
{
parameter1: 20, // the corner has a large radius
fill: $(go.Brush, "Linear", { 0: "rgb(254, 201, 0)", 1: "rgb(254, 162, 0)" }),
stroke: null,
portId: "", // this Shape is the Node's port, not the whole Node
fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true,
cursor: "pointer"
}),
$(go.TextBlock,
{
font: "bold 11pt helvetica, bold arial, sans-serif",
editable: true // editing the text automatically updates the model data
},
new go.Binding("text").makeTwoWay())
);
//......
}
我按以下方式创建节点:
var nodeOperations = new Object();
for (var i = 0; i < countState; i++) {
var json = {'id': i, 'loc': nodesCenters[i].x +' '+nodesCenters[i].y, 'text': markedStateTable['digitStates'][i] + ', ' + markedStateTable['namedStates'][i]};
nodes.push(json);
}
现在我需要以编程方式更改特定节点的填充颜色。我正在尝试这段代码:
var data = myDiagram.model.findNodeDataForKey(0);
myDiagram.model.setDataProperty(data, "fill", "green");
但在那之后,我的图表没有显示。控制台中没有错误。我应该为节点设置新形状吗?或者我该怎么做?感谢您的帮助!
您需要为填充添加数据绑定,否则节点数据中的值无意义。毕竟,如果您有多个具有多个不同填充的形状,那么 data.fill
意味着什么?
因此将new go.Binding("fill")
添加到您要更改的相关形状中:
function init() {
//......
// define the Node template
myDiagram.nodeTemplate =
$(go.Node, "Auto",
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
// define the node's outer shape, which will surround the TextBlock
$(go.Shape, "RoundedRectangle",
{
parameter1: 20, // the corner has a large radius
fill: $(go.Brush, "Linear", { 0: "rgb(254, 201, 0)", 1: "rgb(254, 162, 0)" }),
stroke: null,
portId: "", // this Shape is the Node's port, not the whole Node
fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true,
cursor: "pointer"
},
new go.Binding("fill") // NEW
),
$(go.TextBlock,
{
font: "bold 11pt helvetica, bold arial, sans-serif",
editable: true // editing the text automatically updates the model data
},
new go.Binding("text").makeTwoWay())
);
//......
}
But after that, my chart doesn't display.
我不知道为什么会这样。使用 go-debug.js 查看更多警告。
另请参阅有关 GraphObject 操作的教程,包括使用 setDataProperty:http://gojs.net/latest/learn/graphobject.html
请在nodeArray中指定填充颜色
var nodeDataArray = [
{ key: 1, text: "Name", fill: "#ff5722", stroke: "#4d90fe", description: "geethu" }];
然后将绑定添加到 textBlock 为
$(go.Shape, "RoundedRectangle", {
fill: "#cce6ff" // the default fill, if there is no data-binding
}, new go.Binding("fill", "fill"))
myDiagram.nodeTemplate =
$(go.Node, "Horizontal", {
isTreeExpanded: false,
click: showDetail
},
$(go.Panel, "Auto",
$(go.Shape, "RoundedRectangle", {
fill: "#cce6ff", // the default fill, if there is no data-binding
stroke: "#6699ff",
height: 40,
strokeWidth: 2,
portId: "",
cursor: "pointer", // the Shape is the port, not the whole Node
}, new go.Binding("fill", "fill")),
$(go.TextBlock, {
editable: true
},
new go.Binding("text", "text"))
),
$("TreeExpanderButton", { alignment: go.Spot.Bottom, alignmentFocus: go.Spot.Top }, { visible: true })
);
可以根据属性值,根据要填充的节点使用switch语句。假设你有一个名为 'namedStates' 的 属性,你应该根据它更改节点颜色,这是我的例子:
$(go.Shape, "Rectangle", {
name: "SHAPE",
fill: "red",
stroke: null,
fromLinkable: true,
toLinkable: true,
cursor: "pointer"
}, new go.Binding("fill", "namedStates", function(type) {
switch (type) {
case 1:
return "#FF4081";
case 2:
return "#303F9F";
case 3:
return "#00796B";
case 4:
return "#FF5722";
case 5:
return "#5D4037";
case 6:
return "#7B1FA2";
default:
return '#8BC34A';
}
})),
我正在使用 GoJS 制作图表。
我的图表配置(来自官方文档的示例):
function init() {
//......
// define the Node template
myDiagram.nodeTemplate =
$(go.Node, "Auto",
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
// define the node's outer shape, which will surround the TextBlock
$(go.Shape, "RoundedRectangle",
{
parameter1: 20, // the corner has a large radius
fill: $(go.Brush, "Linear", { 0: "rgb(254, 201, 0)", 1: "rgb(254, 162, 0)" }),
stroke: null,
portId: "", // this Shape is the Node's port, not the whole Node
fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true,
cursor: "pointer"
}),
$(go.TextBlock,
{
font: "bold 11pt helvetica, bold arial, sans-serif",
editable: true // editing the text automatically updates the model data
},
new go.Binding("text").makeTwoWay())
);
//......
}
我按以下方式创建节点:
var nodeOperations = new Object();
for (var i = 0; i < countState; i++) {
var json = {'id': i, 'loc': nodesCenters[i].x +' '+nodesCenters[i].y, 'text': markedStateTable['digitStates'][i] + ', ' + markedStateTable['namedStates'][i]};
nodes.push(json);
}
现在我需要以编程方式更改特定节点的填充颜色。我正在尝试这段代码:
var data = myDiagram.model.findNodeDataForKey(0);
myDiagram.model.setDataProperty(data, "fill", "green");
但在那之后,我的图表没有显示。控制台中没有错误。我应该为节点设置新形状吗?或者我该怎么做?感谢您的帮助!
您需要为填充添加数据绑定,否则节点数据中的值无意义。毕竟,如果您有多个具有多个不同填充的形状,那么 data.fill
意味着什么?
因此将new go.Binding("fill")
添加到您要更改的相关形状中:
function init() {
//......
// define the Node template
myDiagram.nodeTemplate =
$(go.Node, "Auto",
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
// define the node's outer shape, which will surround the TextBlock
$(go.Shape, "RoundedRectangle",
{
parameter1: 20, // the corner has a large radius
fill: $(go.Brush, "Linear", { 0: "rgb(254, 201, 0)", 1: "rgb(254, 162, 0)" }),
stroke: null,
portId: "", // this Shape is the Node's port, not the whole Node
fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true,
cursor: "pointer"
},
new go.Binding("fill") // NEW
),
$(go.TextBlock,
{
font: "bold 11pt helvetica, bold arial, sans-serif",
editable: true // editing the text automatically updates the model data
},
new go.Binding("text").makeTwoWay())
);
//......
}
But after that, my chart doesn't display.
我不知道为什么会这样。使用 go-debug.js 查看更多警告。
另请参阅有关 GraphObject 操作的教程,包括使用 setDataProperty:http://gojs.net/latest/learn/graphobject.html
请在nodeArray中指定填充颜色
var nodeDataArray = [
{ key: 1, text: "Name", fill: "#ff5722", stroke: "#4d90fe", description: "geethu" }];
然后将绑定添加到 textBlock 为
$(go.Shape, "RoundedRectangle", { fill: "#cce6ff" // the default fill, if there is no data-binding }, new go.Binding("fill", "fill"))
myDiagram.nodeTemplate =
$(go.Node, "Horizontal", {
isTreeExpanded: false,
click: showDetail
},
$(go.Panel, "Auto",
$(go.Shape, "RoundedRectangle", {
fill: "#cce6ff", // the default fill, if there is no data-binding
stroke: "#6699ff",
height: 40,
strokeWidth: 2,
portId: "",
cursor: "pointer", // the Shape is the port, not the whole Node
}, new go.Binding("fill", "fill")),
$(go.TextBlock, {
editable: true
},
new go.Binding("text", "text"))
),
$("TreeExpanderButton", { alignment: go.Spot.Bottom, alignmentFocus: go.Spot.Top }, { visible: true })
);
可以根据属性值,根据要填充的节点使用switch语句。假设你有一个名为 'namedStates' 的 属性,你应该根据它更改节点颜色,这是我的例子:
$(go.Shape, "Rectangle", {
name: "SHAPE",
fill: "red",
stroke: null,
fromLinkable: true,
toLinkable: true,
cursor: "pointer"
}, new go.Binding("fill", "namedStates", function(type) {
switch (type) {
case 1:
return "#FF4081";
case 2:
return "#303F9F";
case 3:
return "#00796B";
case 4:
return "#FF5722";
case 5:
return "#5D4037";
case 6:
return "#7B1FA2";
default:
return '#8BC34A';
}
})),