YUI EventTarget例子

YUI().use('event-custom', function(Y) {

			function BubbleTarget() {
				Y.log("BubbleTarget init");
			}

			function Publisher(bubbleTo) {
				Y.log("Publisher init");

				this.init(bubbleTo);
			}

			Publisher.prototype = {
				init: function(bubbleTo) {
					this.addTarget(bubbleTo);

					this.publish("TestEvent", {
						emitFacade: true,
						defaultFn: function() {
							Y.log("defaultFn");
						},
						preventedFn: function() {
							Y.log("preventFn");
						},
						stoppedFn: function() {
							Y.log("stoppedFn");
						}
					});
				}
			};

			Y.augment(Publisher, Y.EventTarget);
			Y.augment(BubbleTarget, Y.EventTarget);

			var bubbleTarget = new BubbleTarget();		//BubbleTarget init 

			bubbleTarget.subscribe("TestEvent", function(e) {
				Y.log("fire in BubbleTarget: " + e.data);
			});

			var publisher = new Publisher(bubbleTarget);       //Publisher init 
			publisher.subscribe("TestEvent", function(e) {
				Y.log("fire in Publisher: " + e.data);
			});
			publisher.fire("TestEvent", {data:"s"});
			/**
			  * fire in Publisher: s  
			  * fire in BubbleTarget: s
			  * defaultFn
			  */
			Y.log("-----------------------");	

			publisher.unsubscribeAll("TestEvent");

			publisher.fire("TestEvent", {data:"s"});
			/**
			  * fire in BubbleTarget: s
			  * defaultFn
			  */
			Y.log("-----------------------");

			publisher.subscribe("TestEvent", function(e) {
				Y.log("fire in Publisher: " + e.data);
				e.stopPropagation();
			});
			publisher.fire("TestEvent", {data:"s"});
			/**
			  * fire in Publisher: s  
			  * stoppedFn 
			  * defaultFn
			  */
			Y.log("-----------------------");

			publisher.unsubscribeAll("TestEvent");
			publisher.subscribe("TestEvent", function(e) {
				Y.log("fire in Publisher: " + e.data);
				e.preventDefault();
			});
			publisher.fire("TestEvent", {data:"s"});
			/**
			  * fire in Publisher: s  
			  * fire in BubbleTarget: s
			  * preventFn 
			  */
		});


其中在Publisher中通过addTarget的方法,将BubbleTarget加入到了冒泡的链里面

该方法由EventTarget提供,用来为该实例注册新的冒泡对象


如果要使用preventDefault或者stoppropagation的方法,则需要publish(),否则,该方法可有可无


emitFacede用来包装传入相应事件的方法中event(即参数e),设置为true后,就像一般的event一样,可以调用preventDefault方法,设为false,则只看你传入的参数,不能调用preventDefault等方法


subscribe用来订阅事件,当然也可以用on


当调用e.preventDefault时,就会回调publish方法中的preventedFn方法

调用e.stoppropagation时,就会回调publish方法中的stoppedFn方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值