2013-10-04 36 views
3

寫像jQuery的回調在jQuery中您可以使用調這樣的:上點擊

$('#btn').on('click', function() { 
// code 
}); 

我怎麼能寫的東西就像即

foo.on('bar', function() { 
    // code 
}); 

foo.on('buzz', function() { 
    //code 
}); 

謝謝。

+0

什麼是'foo'? – David

+1

更重要的是什麼'bar'和'buzz' :) –

+0

你應該看[觀察者模式](http://robdodson.me/blog/2012/08/16/javascript-design-patterns-observer /)。 – Andy

回答

2

就像是:

var eventBus = function() { 

    var supportedEvents = ['bar', 'buzz']; 

    var subscribers = {}; 
    for (var i = 0; i < supportedEvents.length; i++) { 
     subscribers[supportedEvents[i]] = []; 
    } 

    return { 
     on: function (event, action) { 
      subscribers[event].push(action); 
     }, 

     trigger: function (event) { 
      var funsToCall = subscribers[event] || []; // empty array if unsupported event 
      for (var i = 0; i < funsToCall.length; i++) { 
       funsToCall[i](); // calling a function 
      } 
     } 
    } 
} 

然後調用eventBus函數來得到一個對象,這將是你的foo

var foo = eventBus(); 

foo.on('bar', function() { 
    console.log('bar'); 
}); 

foo.on('buzz', function() { 
    console.log('buzz'); 
}); 

foo.trigger('bar'); // prints 'bar' to the console 
foo.trigger('buzz'); // prints 'buzz' to the console 
4

這是jQuery的一個有效的聲明,來調用需要觸發使用.trigger(eventname)

foo.trigger('foo') 
+1

...假設'foo'是一個jQuery實例 – David

+0

@David yes ..假設'foo'是一個jQuery包裝器對象 –

+0

對不起,不清楚。查看問題評論。 – ale

3

下面的文章將有助於事件的方法

如何在jQuery中創建自定義事件

http://www.sitepoint.com/jquery-custom-events/

jQuery的.trigger方法是關鍵。您可以在任何時候觸發具有新類型名稱和任意數據的事件,例如

$.event.trigger({ 
    type: "newMessage", 
    message: "Hello World!", 
    time: new Date() 
}); 

處理程序現在可以訂閱「newMessage」事件,例如,

$(document).on("newMessage", newMessageHandler); 
+0

任何意見爲downvotes? –

+0

你沒有回答這個問題。 – siledh