这个问题可能很愚蠢,但我不完全理解事件处理程序在幕后是如何工作的。例如,当文件更改或 JavaScript 中的浏览器事件时调用的函数。对于所有这些,都有可以使用的现成工具,但是这些工具是如何实现的,例如,文件更改时的相同事件。据我所知,首先想到的方法while (true)
很糟糕,原则上您必须添加最小延迟,以免处理器过载,但不知何故,他们能够实现不加载处理器的事件,并且立即开火。您能否解释一下这是如何在低级别实施的或分享相关来源?
Stishka
Asked:
2022-07-18 13:42:03 +0800 CST
gif_word = ['.gif']
tenor_com = ['tenor.com']
@bot.event
async def on_message(msg):
for word3 in tenor_com:
if word3 in msg.content:
return
else:
for word in likns_words:
if word in msg.content:
if msg.author == bot.user:
pass
else:
for word2 in gif_word:
if word2 in msg.content:
pass
else:
await msg.delete()
print(discord.author.name, 'using likns_words')
await discord.author.name.add_roles(config.MutedRole)
await bot.process_commands(msg)
Alexandr
Asked:
2022-07-06 22:00:15 +0800 CST
它有一个实体和2个事件监听器,当字段更新时,检查器检查该字段是否已更改,然后处理逻辑。问题是侦听器阻塞了第二个侦听器,因此更改检查器在第二个侦听器中不起作用(它说该字段没有更改),尽管基础中有更改。
public function postUpdate(LifecycleEventArgs $eventArgs): void
{
$entity = $eventArgs->getObject();
if ($entity instance of Group) {
$changedFields = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($entity);
$isChanged = $this->checker->isChanged($changedFields, ['teacher']);
if ($isChanged) {
$this->proceedTeacherChanges($entity);
}
Alexandr Shmidt
Asked:
2020-02-15 01:05:10 +0800 CST
我正在尝试制作旋转木马。现在我正在开发一个功能,当您单击指标时,会确定指标的索引并将其更改为具有相应索引的图片。该功能有效,但将来,当您单击任何其他指标时,什么都不会发生。包括。无法通过开发人员工具捕获错误。问题是什么?
let imageIndex = 0;
//array with photo
const picArr = [
'golden-retriever-puppy.jpg',
'Drathaar.jpg',
"beagle.jpg",
'alabay.jpg',
'rizenshnautser.jpg',
'Airedale.jpg',
];
showImage(imageIndex, pictureBlock);
function showImage(imageIndex, containerElement){
containerElement.style.backgroundImage = "url(" +picArr[imageIndex]+ ")";
//get list of indicators
let indItems;
const indicatorList = document.getElementById('indicatorList');
if(indicatorList) {
//delete list of indicators
divIndicator.removeChild(indicatorList);
}
//create new element with other picture
indItems = document.createElement('ul');
divIndicator.appendChild(indItems);
indItems.setAttribute('id', 'indicatorList');
for (let i = 0; i < picArr.length; i++){
const item = document.createElement('li');
indItems.appendChild(item);
item.setAttribute('data-order', i);
}
//change colour of running indicator item
indItems.childNodes[imageIndex].setAttribute('id', 'start');
}
function defineIndicatorNumber(e){
console.log(Number(e.target.getAttribute('data-order')));
imageIndex = Number(e.target.getAttribute('data-order'));
showImage(imageIndex, pictureBlock);
}
const indicatorButton = document.querySelectorAll('li');
indicatorButton.forEach(item => item.addEventListener('click', defineIndicatorNumber));
感谢您的帮助,我重写了重新创建的循环,如下所示:
for (let i = 0; i < picArr.length; i++){
item = document.createElement('li');
indItems.appendChild(item);
item.setAttribute('data-order', i);
let items = document.querySelectorAll('li');
items.forEach(item => item.addEventListener('click', defineIndicatorNumber));
}
Владислав
Asked:
2020-01-11 15:24:09 +0800 CST
在会议实体中,如果会议日期发生变化,则需要发生一个事件,该事件将向所有参与者发送更改通知。
或者,如果您对如何更好地实现这一点有任何想法,我将不胜感激。检查控制器中的更改是不可能的。需要的是某种触发器,可以直接观察本质本身的变化。
class Meeting{
/**
* @var DateTime
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @param DateTime $date
* @return Meeting
*/
public function setDate($date)
{
if($this->date !== $date){
// todo: send messages
}
$this->date = $date;
return $this;
}
}