Javascript 如何从回调函数内部寻址Vue.js组件中的方法?

Javascript 如何从回调函数内部寻址Vue.js组件中的方法?,javascript,vue.js,vuejs2,vue-component,Javascript,Vue.js,Vuejs2,Vue Component,我只是不明白为什么我不能从回调函数(第64行和第70行)内部处理方法“virtDia” [Vue warn]:挂载挂钩中的错误:“TypeError:this.virtDia不是函数” 发现于 --->位于resources/assets/js/components/vegbeddeditor.vue TypeError:“this.virtDia不是函数” //沃拉格:https://dev.to/ignoreintuition/binding-data-to-charts-using-

我只是不明白为什么我不能从回调函数(第64行和第70行)内部处理方法“virtDia”

[Vue warn]:挂载挂钩中的错误:“TypeError:this.virtDia不是函数” 发现于

--->位于resources/assets/js/components/vegbeddeditor.vue

TypeError:“this.virtDia不是函数”


//沃拉格:https://dev.to/ignoreintuition/binding-data-to-charts-using-vue-components-and-d3-4i27
从“d3”导入*作为d3;
导出默认值{
道具:['data','vegbed',],
数据:函数(){
返回{
}
},
计算:{
displaywidth:function(){return 600;},
displayheight:function(){返回this.displaywidth*(this.vegbed.length/this.vegbed.width);},
margin:function(){return{top:0,right:0,bottom:0,left:0};}
},
方法:{
initializeChart:函数(){
这个.drawGardenBox();
},
virtDia:函数(realDia){
返回(this.displaywidth/this.vegbed.width)*readia;
},
drawGardenBox:函数(){
this.gardenbox=d3.select('#vegbedcontainer').append('svg'))
.attr(“宽度”,this.displaywidth+this.margin.left+this.margin.right)
.attr(“高度”,this.displayheight+this.margin.top+this.margin.bottom)
//提示für取消选择zeichen
var bg=this.gardenbox.append(“g”)
.on(“单击”,鼠标单击);//在后台单击取消选择
bg.append(“rect”)
.attr('class','bg')
.attr(“x”,此页边距为左)
.attr(“y”,此为.margin.top)
.attr(“宽度”,this.displaywidth+this.margin.left+this.margin.right)
.attr(“高度”,this.displayheight+this.margin.top+this.margin.bottom)
功能鼠标单击(d){
d3.selectAll(“.selected”).raise().classed(“selected”,false);
}         
},
刷新床:函数(){
var gplant=this.gardenbox.selectAll(“g”)
.data(this.data).enter().append(“g”)
.attr(“id”,函数(d){return d.id;})
.attr(“transform”,函数(d){return“translate”(“+d.x+”,“+d.y+”)”)
。打开(“单击”,鼠标单击)
.call(d3.drag()
.on(“开始”,拖动开始)
.打开(“拖动”,拖动)
.on(“结束”,绘图))
//功能virtDia(realDia){
//返回(this.displaywidth/this.vegbed.width)*readia;
//                }
gplant.append(“圆”)//最大大小
.attr('类别','工厂')
.attr(“cx”,函数(d){return d.x;})
.attr(“cy”,函数(d){返回d.y;})
.attr(“r”,函数(d){返回this.virtDia(d.plant.成人直径);});
gplant.append(“圆”)//最小大小
.attr('类别','工厂')
.attr(“cx”,函数(d){return d.x;})
.attr(“cy”,函数(d){返回d.y;})
.attr(“r”,函数(d){返回this.virtDia(d.plant.exposure_diameter);});
gplant.append(“图像”)
.attr('类别','工厂')
.attr(“xlink:href”,函数(d){return d.picref;})
.attr(“x”,函数(d){返回d.x-(d.picsize/2);})
.attr(“y”,函数(d){返回d.y-(d.picsize/2);})
.attr(“宽度”,函数(d){return d.picsize;})
.attr(“高度”,函数(d){返回d.picsize;});
功能鼠标单击(d){
d3.selectAll(“.selected”).raise().classed(“selected”,false);
d3.选择(此项)。选择全部(“.plant”).raise().classed(“已选择”,true);
d3.selectAll(“#”+this.id).classed(“selected”,true);
}
函数dragstarted(d){
d3.selectAll(“.selected”).raise().classed(“selected”,false);
d3.选择(此项)。选择全部(“.plant”).raise().classed(“已选择”,true);
d3.selectAll(“#”+this.id).classed(“selected”,true);
d3.event.sourceEvent.stopPropagation();
}
函数(d){
d3.选择(this.attr)(“transform”,“translate”(+(d.x=d3.event.x)+)”,“+(d.y=d3.event.y)+”);
}
函数d(d){
//d3.选择(此).classed(“活动”,false);
}
}
},
//生命周期事件

mounted:function(){//将
这个
赋值给一个全局变量,比如
vm
,并在回调函数中调用它:

   let vm=this;//<---

   gplant.append("circle") // max size
                .attr('class', 'plant')
                .attr("cx", function(d) { return d.x; })
                .attr("cy", function(d) { return d.y; })
                .attr("r", function(d) { return vm.virtDia(d.plant.adult_diameter); 
     });

                   gplant.append("circle") // min size
                .attr('class', 'plant')
                .attr("cx", function(d) { return d.x; })
                .attr("cy", function(d) { return d.y; })
                .attr("r", function(d) { return vm.virtDia(d.plant.exposure_diameter); });
让vm=this//