Javascript KineticJS在事件上设置变量值
我在一个对象中定义了几个kineticJS圆,并创建和显示了其中的几个对象。我想要的是根据用户从显示的圆圈中选择的对象生成一个XML对象 为此,我尝试设置一个变量值,当单击一个特定的圆时,在对象中定义一个变量值,并通过Javascript KineticJS在事件上设置变量值,javascript,dom-events,kineticjs,Javascript,Dom Events,Kineticjs,我在一个对象中定义了几个kineticJS圆,并创建和显示了其中的几个对象。我想要的是根据用户从显示的圆圈中选择的对象生成一个XML对象 为此,我尝试设置一个变量值,当单击一个特定的圆时,在对象中定义一个变量值,并通过object.property某种方式调用它。然而,这不起作用 以下是我在工作中使用的一些代码: function Graph(i, j, refRel, refRelTxt) { subNodes = seventeen + eighteen + nin
object.property
某种方式调用它。然而,这不起作用
以下是我在工作中使用的一些代码:
function Graph(i, j, refRel, refRelTxt) {
subNodes = seventeen + eighteen + nineteen;
graphNode = "<" + refRelTxt + ">" + subNodes + "<" + refRelTxt + ">";
var layer = new Kinetic.Layer({
width: 200,
height: 100,
x: (stage.getWidth() / 2.5) + i,
y: (stage.getHeight() / 2.5) + j
});
var circle19 = new Kinetic.Circle({
x: 10,
y: layer.getHeight() / 2,
radius: cradius,
fill: '#CCCCCC'
});
//++++++++++++++++++++++++++++++++++++++++++++++++++
var circle18 = new Kinetic.Circle({
x: 10 + n,
y: (layer.getHeight() / 2) - m,
radius: cradius,
fill: '#CCCCCC'
});
var circle17 = new Kinetic.Circle({
x: 10 + n,
y: (layer.getHeight() / 2) + m,
radius: cradius,
fill: '#CCCCCC'
});
//============Mouse in/out operations
circle17.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
seventeen = "<node>seventeen<node>";
});
circle18.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
eighteen = "<node>eighteen<node>";
});
circle19.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
nineteen = "<node>nineteen<node>";;
});
// add the shape to the layer
layer.add(circle19);
layer.add(circle18);
layer.add(circle17);
stage.add(layer);
}
然后调用
graph19.graphNode
值,根据用户单击的圆圈获取xml。但是,graph19.graphNode
不会动态设置值。我知道我在这里做错了一些我无法理解的事情。当我设置全局变量并执行此操作时,它会起作用。我想要的是从创建的各种图形对象中提取XML。如果我理解正确。。。您希望能够调用graph19.graphNode
,它将输出一些预定义的xml字符串,这些字符串根据用户单击的圆圈动态填充
如果是:
首先,为了能够从新图形
对象调用属性graphNode
,您必须将分配给这个.graphNode
,而不仅仅是graphNode
。否则,当您调用graph19.graphNode
时,它将是未定义的
然后需要将this
赋值给一个变量,比如:var node=this
以便您可以在单击功能中访问节点
。(这是因为默认情况下,当您在动态事件函数中使用This
时,在这种情况下单击,This
将被指定给要绑定事件的dynamic.Shape
)
最后,您需要更新节点
(this.graphNode),每次单击圆时,使用数组跟踪选定的元素:
this.graphNode = '';
var node = this;
var nodeText = '';
circle17.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
seventeen = "<node>seventeen<node>";
nodeText += seventeen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
circle18.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
eighteen = "<node>eighteen<node>";
nodeText += eighteen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
circle19.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
nineteen = "<node>nineteen<node>";
nodeText += nineteen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
在此之后,您可以执行类似操作,从
dblclick
事件上的selectedNodes
数组中删除对象。您好,谢谢您的详细回答。实际上,我想让用户可用,双击以取消选择所选层并删除指定的xml标记。为此,我希望每个圆都与一个对象相关联,以存储自己的xml值,然后在对象中使用所有这些小标记来创建更高级别的xml节点。在这种情况下,如果用户选择了一个圆,xml标记将被分配给对象,如果取消选择,对象将保留一个空白字符串。你认为我能接受你的建议吗?非常感谢。你的建议很有魅力。我的问题更多的是js而不是kineticjs。你是否推荐任何来源来获得关于js的丰富知识?(如您所见,缺少一些基本概念)
this.graphNode = '';
var node = this;
var nodeText = '';
circle17.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
seventeen = "<node>seventeen<node>";
nodeText += seventeen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
circle18.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
eighteen = "<node>eighteen<node>";
nodeText += eighteen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
circle19.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
nineteen = "<node>nineteen<node>";
nodeText += nineteen;
node.graphNode = "<" + refRelTxt + ">" + nodeText + "<" + refRelTxt + ">";
});
this.graphNode = '';
this.selectedNodes = [];
this.nodeText = '';
var node = this;
circle17.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
seventeen = "<node>seventeen<node>";
selectedNodes.push(seventeen);
node.nodeText = '';
for (var i=0; i<selectedNodes.length; i++) {
node.nodeText += selectedNodes[i];
}
node.graphNode = "<" + refRelTxt + ">" + node.nodeText + "<" + refRelTxt + ">";
});
circle18.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
eighteen = "<node>eighteen<node>";
selectedNodes.push(eighteen);
node.nodeText = '';
for (var i=0; i<selectedNodes.length; i++) {
node.nodeText += selectedNodes[i];
}
node.graphNode = "<" + refRelTxt + ">" + node.nodeText + "<" + refRelTxt + ">";
});
circle19.on('click', function (evt) {
this.setFill('#00FF00');
layer.draw();
nineteen = "<node>nineteen<node>";
selectedNodes.push(nineteen);
node.nodeText = '';
for (var i=0; i<selectedNodes.length; i++) {
node.nodeText += selectedNodes[i];
}
node.graphNode = "<" + refRelTxt + ">" + node.nodeText + "<" + refRelTxt + ">";
});