我已经写C++事件驱动的应用程序使用MFC为GUI按钮,我用HTML事件,如onmousedown触发一些Javascript在一个网页。这个想法的事件驱动的程是直觉时使用的接口和事件的硬编码。

我知道如何使用一种功能的指针在C,我看到Windows如何使用他们运行的一个事件循环。我可以写代码的动态地调用不同的功能。

我的问题是,从编写时并进入运行时间。我说的任何语言在这里,但是如果你需要一个语言中,选择Javascript,或PHP因为我用他们大多数的这些日子。我没有把握所有我怎么可能会用我自己的事件的对象得到的东西做的。它不仅仅是一个概念,我得到的。因为我不用他们,我不知道他们的实际使用可能。

例如,我想,如果我想做一个自定义转为基础的游戏,我可能会使用事件的对象,以表示效果的一些游戏件的能力,只需要"发生"。

有人能给我一个简单的使用的定义活动?或情况是有用的或实际的?它不会在很大程度上取决于语言、环境和事件如何处理?Javascript的答案是好的,但是我读了多种语言。

对不起我只是缺乏在这方面,需要一些切实、高级(中间?) 洞察力。这就像指针。我的"获得"指针以及如何,他们是你的朋友。但是,曾经有一段时间里我没有,我知道的许多人仍然不。这是简单的一旦你得到它,我只是没有得到定义的、动态的事件的方式。

有帮助吗?

解决方案

当我们谈论的事件为导向节目,我们常常谈论一个或多个实现的 观察员的设计图案.和一个目标观察者的设计图案为实现 松散耦合 对象之间。

这可能并不意味着很多没有一个很好的例子,当然还有许多好的人那里;我怀疑我的将是他们最好的,但是我要拍打在它仍然。想象一下两个对象。一个目的,要知道,当事情发生的其他目的,因此它可以做一些事情本身--或许家庭的狗,车,想打招呼爸爸在门口的时候,他得到家庭的工作。有几个办法,你可能程序方案,对吗?

  • 让爸爸有一个参考,以探测器,而当他回家时,呼叫车的greetDatAtTheDoor()方法,或者

  • 给Rover一个参考爸爸 听爸爸的onArriveHome事件, 并且当火灾,呼叫 greetDadAtTheDoor()内部。

表面上看,有可能似乎不是太大的区别两者之间,但实际上,爸爸有一些流动站的执行情况烧成他;如果火星车的执行情况必须改变,因为某些原因,我们必须做出变化,在两个地方:一旦在车,然后再在爸爸。不是一个巨大的处理,也许,但仍然不理想。

现在想想妈妈想要迎接老爸为好。猫先生Bigglesworth,谁不喜欢爸爸非常想要确定他不在身边,因此,他宁愿去外面。和一个邻居乔伊,想要知道什么时候爸爸回家,所以他可能错误他关于二十块钱爸爸欠他的。我们如何考虑所有这些情况,和附加那些将不可避免的农作物了吗?把引用妈妈的greetHusband()方法,猫的getOutNow()方法,狗的greetDadAtTheDoor()方法,并乔的goGetMyMoney()方法进爸爸的类定义就会混乱的东西,快给爸爸-并没有很好的理由,因为所有的爸爸真的需要做自己是回家。妈的,狗、猫和邻居只是想要通知的当发生这种情况,使他们可以做任何他们内部的实现需要。

语文处理的具体细节的这些东西不同的方式,但是正如你看到的时候你开始搜索周围,该模式通常涉及到有一个数组,或一组结构,在该事件"的调度员"(在这种情况下,父亲--即,象其他所有人都感兴趣的),将"用户"(例如,妈妈,猫,车和Joe) 所有的"注册"通过调用一个公开的方法上的调度程序,并通过在提到自己-参考文献,结束了,在某些形式,在爸爸的阵列"的订户。" 然后,当爸爸回家了,他"派"的一个事件--"我的家!"事件,说--实际上是一个函数,循环过他的每一个用户和调用它们用一些公开访问的方法他们自己的-只有这一个方法,其名称爸爸不知道,没有知道,因为听众提供它的时候,他/她通过它。

因为我碰巧码的主要ActionScript这些天来,这怎么可能看起来在我的世界--说,作为宣布从我妈妈类:

var dad:Dad = new Dad();
dad.addEventListener(DadEvent.ARRIVED_HOME, greetHusbandAtDoor);

private function greetHusbandAtDoor(event:DadEvent):void
{
   // Go greet my husband
}

在爸爸,那么,我所要做的,当我回家的时候,是:

dispatchEvent(new DadEvent(DadEvent.ARRIVED_HOME));

...因为闪光处理该事件的调度和通知的细节,对我来说(再次,每个人都不会有点不同,但在内部,闪光灯下的概念模式,我所描述),我爸爸回家时,和每个家庭成员做什么,它签署了做到自动的。

我们希望,解释了事情有点-什么事-想看起来像什么的松散耦合装置,为什么这是重要的,等等。好运!

其他提示

在编译的langauge,你写你自己的事件循环。在运行时的语言,它是由主机环境中实现已经和程序员只得到一个抽象接口到事件的系统。你永远也看不到事件循环。

有两个方面与事件的建筑功能。首先是定义在哪一个事件将触发条件。在一个浏览器的JavaScript,没有一个单一的“鼠标按下”事件。有实际上一个页面上的每一个元素。在这种情况下,当其中任何一个将触发条件是鼠标光标的位置基于两者是否鼠标按钮刚刚从向上状态切换到关闭状态。这种情况可能会导致多个事件触发。 (在浏览器中,有一种叫事件“冒泡”这是与此有关。但是这超出范围在这里)。

在其他方面是事件处理程序。事件发生而不管是否有用于与否的处理程序。提供处理程序是由你。在JavaScript中,函数是第一类值。它们会在运行时定义,而不是在编译时间所以没有必要对指针或跳表。您在运行时创建一个新的功能,并且将其分配给主机环境中查找一个特殊的属性,当一个特定的事件触发。

等堆栈溢出,会出现在每个向下箭头的“点击”事件,其中转动箭头红色,递减许多的事件处理程序,将检查其他一些变量和有条件地示出了通知。然后,当处理器returns-返回控制线程的浏览器,并哈利路亚用户可以通过浏览器再次进行互动。 (所有交互停止,而事件的处理,所以你最好让它快)。下面是使用jQuery库的例子。

jQuery("a .downarrow")
.click(function(e){ e.target.style.color="red" /* ... do other things */ });

或在原始的JavaScript(1.6版本),可能

Array.prototype.slice.apply(document.getElementsByTagName("a"))
.filter(function(o){ return !!(/downarrow/).exec(o.className)})
.forEach(function(o){ 
    o.onclick= function(e){ 
        e.target.style.color="red" /* ...do other things * / 
    }
 });

这真的是那么简单。你会做这样的事情的主要原因是它允许异步交互。一个GUI应用程序不能在一条直线前进,一步一步。它具有动态用户的输入作出响应。活动是一种方法,一种假的多线程应用程序的外观。它可以看到,许多事情同时发生而不中断海誓山盟用户。

您可以使用库来定义自定义事件。这也许是一些编码域特定事件。例如:你有一个国际象棋游戏,正在考虑下一步的行动。用于搜索移动过程运行的时间。棋局可以触发一个“onComputerMove”事件。你可以处理该事件与抓住规格的举动,并更新棋盘的视觉表现,并为用户,并退出弹出一个消息的功能。然后当玩家移动,你可以触发一个“onPlayerMove”事件,这确实很多同样的事情。

最美妙的事情有关事件是,是减少双向的明确之间的联接两个模块或课程。

所以我说我有两类:宝贝,妈妈


没事,我大致地看到两种方法来让妈妈养活一个孩子

  • 妈妈电话的 baby.pokeBelly() 方法上的婴儿每半个小时知道如果你要叫 baby.fillWith(milk).
    问题是妈妈的线需要等待有一天后,婴儿在一段时间的循环
  • 宝宝知道其相关的妈妈和一个呼叫 mommy.feed(me) 方法,这反过来通话 baby.fillWith(milk).
    问题是那么,问一个简单的宝宝要问正确的妈妈来填补其腹部。
    婴儿不这样做,因为他们应该保持简单。

与的事件,可以结合 Mommy.OnBabyCries(baby) 它还的 baby.Cry 活动:

void Mommy.OnBabyCries(baby) {
    baby.fillWith(milk)
}

在此之后,如果婴儿想吃,它所要做的是提高其哭泣的事件。

逻辑将停留在妈妈,或甚至在后面的任何保姆,和宝宝保持快乐,而不必担心。

我不知道我完全理解你的问题,但与事件类就像一个按钮的GUI。试想一下像homonculus ......与事件每类里面有一个小的人与虚拟按钮按下。他不知道该按钮会做什么,但他知道何时按它。现在想与其他人很少在它相关的类。那个人知道,当他听到一个按钮被按下的消息,他应该做的事情。

只要你愿意第二个人知道的东西的第一个男人一样,你将第一类和第二类(订阅事件)之间的交换机。当第一个人按下按钮(触发事件),第二个人做什么,他知道他应该做的事...

我不知道这是否有助于或我只是我在我的节目一点微小的人的酸之旅思维...

StackOverflow, 当你投降,你的声誉落和你的下箭头变成红色。

通常,您写一个单一的 onclick, 更新的所有要素,并尽量不要忘记改变它的每一次当的页面布局的变化。

相反,你可以宣布 onVoteDown 事件、火灾,它在 onclick 和订阅这个事件:

  • 你的声誉 div
  • 箭头 img
  • 你的 XmlHTTPRequest 送你的投票服务器。

我不完全确定什么样的回答你在寻找的,所以我很抱歉,如果这不是什么密切。;)


通过 定义, 你的意思是 定义的行动, 定制的触发器, 或者真正的 定义事件?

E.g.:一个 定义的行动 会响应预先定义的事件(就是说,一个鼠标点击), 定制的触发 将伪造鼠标点击的通过剧本,和一个 定义事件 会被监听,不是限定的语言或不容易获得。

如果你想寻找 定义事件, 我真的不能帮助你。虽然我不认为还有很多支持他们在JavaScript。


定义 动作...

事件通常都是经由预先定义的性质的目的,说的 window.onload.默认情况下,他们都是平等的, undefinednull.因此,要把他们使用,必须设置他们的价值的一个函数。

你可以使用"匿名"的功能:

window.onload = function (eventObject) {
    /* ... */
};

或将其设置为一个功能的基准(不相同,但类似的指针):

function handleOnload(eventObject) {
    /* ... */
}

window.onload = handleOnload; /* note the lack of parenthesis */

该事件被触发时,函数。因此,在任一设置,在页面完成装载的,该代码的地方,而不是的 /* ... */ 将被执行。

还有更正式的方法可用于创建活动。W3C的定义 addEventListener 同时,即使用 attachEvent. 更多信息.

有很多参考文献可用于学习的活动。这里是2,应该给你一个良好的基础:


浏览通常处理触发事件--无论是用于浏览器的事件(onload)或用户的事件(onclick).酒店和功能意味着作出反应。

触发 你自己的事件不是容易的事情要完成的任务。完全定义 Event 对象需要一些工作--并且 变化之间的浏览器.

不过,如果你不需要 Event 目的,你可以简单地称的事件:

window.onload();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top