Manual:Intro:Class Design Chinese (Legacy)
This version of our Learning Center is unmaintained.
This article may be out-of-date or contain incorrect information.
Please visit the new Sencha Learning Center for up-to-date material.
From Sencha - Learn
| Summary: Class Design |
| Author: Vincent Chen |
| Published: Jul 7, 2007 |
| Ext Version: 1.1 |
Languages: English Chinese
|
Manual:Intro:Class Design(中文翻译)
Javascript中的事件(可能包含用户的动作,如鼠标操作和按键操作以及对Ajax请求的响应)随时都会触发.
为了响应这些事件,并采取适当的操作,我们提供了一个事件处理器Function 作为该事件的监听器(listener). 该函数作为一个纯函数引用(即不包含括符的函数).在函数名后包含括符将触发一次执行了相关操作的函数 调用 . 省略了括符使其成为一个随后可以被调用或者作为其他函数的参数的函数 引用 .
请注意函数引用是没有作用范围的 — 没有 this 引用 — 并且如果要给他传入一个具体的对象作为他的作用范围的话,这个对象必须在事件处理器绑定到事件时就要给出声明.
下面的例子中, myElement 是一个 Ext.Element 对象.
正确写法:
myElement.on("click", myObject.clickHandler, myObject);
上面的例子中,正确的传入函数引用.
错误写法:
myElement.on("click", myObject.clickHandler(), myObject);
而上面的写法则传入了myObject.clickHandler的 调用结果 ,因为使用了(), 导致 clickHandler 被立即执行而不是等到click事件被触发. 这 可能 是合法的如果该函数调用实际返回一个即将被使用的实际的函数引用, 但通常这不是你想要的.
如果你要传参数给一个事件处理器(这里的myObject.clickHandler), 请使用 Function 里的方法, 如:
myElement.on("click", myObject.clickHandler.createCallback("foo", {bar:"bletch"}), myObject);
这个例子里,当事件被出发时,两个参数,一个字符串 "foo", 和一个包含了"bar"属性的对象将传给实际的事件处理器.

Chinese