扩展fabircjs类时,_render()和render()之间的区别是什么?

时间:2018-04-12 00:15:14

标签: fabricjs

我正在创建自定义结构类。通过结构代码查看我注意到了公共render()方法以及私有_render()方法。虽然我知道结构代码库中的下划线表示私有方法,但我不确定应该覆盖哪种方法。 render()的公共版本和私有版本之间的关系是什么?为什么有两种不同的方法?我什么时候应该延长它们?

1 个答案:

答案 0 :(得分:0)

render()位于Object类中,用于绘制选择,转换ctx,设置阴影以及创建/重新绘制缓存画布。

虽然_render()用于绘制特定对象,但在Circle类中,它会绘制一个圆圈。因此,如果您想根据自己的要求绘制内容,则需要覆盖特定类的_render()

<强> 样本

var canvas = new fabric.Canvas('c');

fabric.Circle.prototype._render = function(ctx) {
  ctx.beginPath();
  
  ctx.arc(
    0,
    0,
    this.radius,
    this.startAngle,
    this.endAngle, false);
  this._renderPaintInOrder(ctx);
  ctx.font="30px Arial";
  ctx.fillText('Hi!', 0, 0);
};

canvas.add(new fabric.Circle({
  radius: 120,
  stroke: 'red',
  fill: ''
}));
canvas {
  border: 1px solid #999;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="300" height="300"></canvas>