我正在尝试使用removeEventDelegate
方法删除事件处理程序,但是它不起作用。
这是我添加eventListener的方式:
appointment.addEventDelegate({
ondragstart: this.myFunction.bind(this, temp)
})
这是我尝试删除它的方法,但是它不起作用:
appointment.removeEventDelegate({
ondragstart: this.myFunction.bind(this, temp)
})
答案 0 :(得分:1)
方法removeEventDelegate
等待调用addEventDelegate
时传递的相同对象,因为元素在删除时会查找对象 reference (参见source code)。这些功能是否是新的都没关系。
下面是一个演示删除事件委托的示例:
sap.ui.getCore().attachInit(() => sap.ui.require([ "sap/m/ToggleButton" ], ToggleButton => {
const myDelegate = { // same reference for removing and adding delegate
onmouseover: () => console.log("mouse hovering"), // e.g.
};
const myBtn = new ToggleButton({
text: "Delegate",
press: () => !myBtn.getPressed()
? myBtn.removeEventDelegate(myDelegate) && console.clear()
: myBtn.addEventDelegate(myDelegate, this), // `this` should be the controller instance in your case.
}).placeAt("content");
}));
console.clear();
<script id="sap-ui-bootstrap" src="https://ui5.sap.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-async="true"
data-sap-ui-theme="sap_fiori_3"
data-sap-ui-compatversion="edge"
></script>
<body id="content" class="sapUiBody"></body>
因此,您必须将委托对象放在某个地方,以便稍后将其传递给removeEventDelegate
。例如,请参见stackoverflow.com/a/56852018。
答案 1 :(得分:0)
在bind
上使用function
每次都会创建该功能的新实例。如果您没有引用(指向该实例的变量/属性),则无法在用作侦听器时将其删除。
因此,可以将该实例分配给新变量,或者在不需要/不需要任何未绑定实例的情况下,使用绑定实例覆盖该函数:
this.myFunction = this.myFunction.bind(this, temp)
// or
this.myBoundFunction = this.myFunction.bind(this, temp);
appointment.addEventDelegate({
ondragstart: this.myFunction
})
appointment.removeEventDelegate({
ondragstart: this.myFunction
})