2012-07-10 36 views
2

我想倾听所有网页中的所有io请求,但是,当我使用下面的语法时,我只能用yui实例来听io。如何让跨越实例的Y.io全局事件广播

Y.on('io:success',myCallBack);

如何编写自定义方法/事件或其他内容来实现此目的?

我的问题其实也是一样的,如下网址:

http://yuilibrary.com/forum/viewtopic.php?p=26009

我GOOGLE了一段时间,但没有找到这个实用的答案,任何帮助将不胜感激,谢谢。

回答

2

尝试

(Y.io._map['io:0'] || new Y.IO()).publish({ 
    'io:success': { broadcast: 2 }, 
    'io:complete': { broadcast: 2 }, 
    etc. 
}); 
+0

非常感谢!但你介意给我一个实际的例子吗?因为我还不熟悉YUI API。 – user1514511 2012-07-11 08:25:17

+0

那么,YUI 3的主要用例就是让你的代码保持沙箱状态,不能被全球环境访问。因此,通过实例进行通信不是通过在Y上发布的其他自定义事件完成的,这些事件使用'broadcast:2'配置。然后这些事件将从沙箱内的IO事件订户触发。如果你不需要/需要沙箱,使用simpleyui或'var Y = YUI()。use(...);'全局公开YUI实例。 – Luke 2012-08-02 22:30:46

0
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>io.jsp</title> 
<script src="/spring-test/scripts/yui_3.5.1/build/yui/yui-min.js"></script> 
</head> 
<body> 
test 

<script> 

YUI().use("io-base", function(Y){ 

    function onSuccess(transactionid,response,arguments){ 
     alert('start!'); 
    } 
    Y.Global.on('io:start',onSuccess); 

}); 

Y1 = YUI().use("io-base", "node", function(Y1){ 

    Y1.publish('io:start',{broadcast : 2}); 
    Y1.io("http://www.yahoo.com.hk"); 

}); 

</script> 
</body> 

最后我得到了一个例子,但它仅适用于FF,Chrome,但在IE中失败:

请建议,如果有任何改善,谢谢。

+0

我再次搜索了API,似乎没有办法在不添加Y.publish的情况下实现这一点。 – user1514511 2012-07-14 17:02:48