2012-08-10 35 views
2

我在我的实际javascript项目中有一个非常奇怪的情况。我创建了一个自定义事件,把一个数组此事件数组参数来自参数

$.publish("merilon/TablesLoaded", getTables()); 

其认购本次活动的对象不与

$.subscribe("merilon/TablesLoaded", myfunc) 

两个参数事件,并在功能MYFUNC数组获得。相反,它从阵列中的每个项目获取事件,然后根据下面的参数

所以我expectet是

myfunc(event, [obj1, obj2, obj3 ... objn]){...} 

,但我得到

myfunc (event, obj1, obj2, obj3 ... objn){...} 

我不想要一个解决办法。我需要的是了解为什么会发生这种情况,以及如何防止这种情况发生。任何人的想法?

+0

$ .publish/$订阅似乎并没有成为本土的jQuery。你使用什么插件? Semms,有很多,它们的行为不一样...... – OcuS 2012-08-10 12:39:22

+0

问题是,使用nettuts + pub/sub模型发送数组是不可能的。 $ .publish(“merilon/TablesLoaded”,array); 没有别的然后 $ .trigger( “merilion/TablesLoaded” 事件,阵列) ,当我们看 http://api.jquery.com/trigger/ 下,我们可以读到 .trigger (eventType [,extraParameters]) eventType包含JavaScript事件类型(如点击或提交)的字符串。 extraParameters传递给事件处理程序的附加参数。 – Lehnhard 2012-08-10 12:54:55

+0

所以没有办法防止这种情况,那么下面的: 1.写的其他的pub/sub系统或者使用一些不同势 2.使用像 $ .publish(“merilon/TablesLoaded”一种解决办法,{Ø :的getTables()}); 如果有人看到一些其他的可能性,所以你欢迎与我分享你的想法。 – Lehnhard 2012-08-10 12:55:22

回答

0

如上所述:

(function($) 
{ 
var o = $({}); 
$.each(
     { on : "subscribe", trigger : "publish", 
     off : "unsubscribe" }, 
     function(key, api) 
      { 
      $[api] = function() 
         { 
         o[key].apply(o, arguments); 
         } 
      } 
     ); 
     })(jQuery);