Fix #17223: Fixed detaching a behavior event when it is a Closure instance

This commit is contained in:
Nikolay Poryadin
2019-08-13 20:35:42 +03:00
committed by Alexander Makarov
parent 14a7198434
commit 491f9737fe
5 changed files with 49 additions and 2 deletions

View File

@ -27,6 +27,10 @@ class Behavior extends BaseObject
*/
public $owner;
/**
* @var Array Attached events handlers
*/
private $_attachedEvents = [];
/**
* Declares event handlers for the [[owner]]'s events.
@ -72,6 +76,7 @@ class Behavior extends BaseObject
{
$this->owner = $owner;
foreach ($this->events() as $event => $handler) {
$this->_attachedEvents[$event] = $handler;
$owner->on($event, is_string($handler) ? [$this, $handler] : $handler);
}
}
@ -85,9 +90,10 @@ class Behavior extends BaseObject
public function detach()
{
if ($this->owner) {
foreach ($this->events() as $event => $handler) {
foreach ($this->_attachedEvents as $event => $handler) {
$this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler);
}
$this->_attachedEvents = [];
$this->owner = null;
}
}