反正还有部分覆盖原型吗?
我正在使用fabricjs,并且想覆盖onKeyDown
类的Textbox
事件。目标是拥有与默认键不同的Enter
键行为。
我已经尝试过这种方法
fabric.Textbox.prototype.onKeyDown = (function(onKeyDown) {
return function(e) {
if (e.keyCode === 46) console.log('blur');
// else super(e); <== default behavior would be appreciated here
onKeyDown.call(this, e);
}
})(fabric.Textbox.prototype.onKeyDown);
结果是Enter
键仅起作用,并且结构开发人员/团队实现的现有功能丢失了。我希望onKeyDown
像开箱即用那样工作,但我希望默认事件的Enter
自定义键行为不是默认结构的Enter
行为。
答案 0 :(得分:2)
将您的密钥代码添加到keysMap并分配您的方法。
演示
fabric.Textbox.prototype.keysMap[13] = 'onEnterKeyPressed';
fabric.Textbox.prototype.onEnterKeyPressed = function(e){
console.log('enter key pressed')
}
var canvas = new fabric.Canvas('c');
var textbox = new fabric.Textbox('FABRICJS')
canvas.add(textbox)
canvas{
border:1px solid;
}
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.6.0/fabric.js"></script>
<canvas id='c' width=400 height=400></canvas>
答案 1 :(得分:0)
我相信这样会起作用:
// cache original function
const stockKeyDown = fabric.Textbox.prototype.onKeyDown
// override prototype
fabric.Textbox.prototype.onKeyDown = function(e) {
if (e.keyCode === 46) {
console.log('blur')
return
}
// call cached version
stockKeyDown.call(this, e)
}