2015-11-06 20 views
2

某處在全球範圍內:如何微量元素木偶函數調用

let App = Backbone.Marionette.Application.extend({}); 
window.Ext = new App(); 

內部模塊A:

Ext.vent.trigger('Tracked:Email:send', { 
    from_email: tracking_data.sender, 
    to_emails: tracking_data.to, 
    cc_emails: tracking_data.cc, 
    email_id: tracking_data.email_id || '', 
    template: tracking_data.template_id || '', 
    subject: tracking_data.subject 
}); 

內部模塊B:

Ext.vent.on('all', function (evt_name, params) { 
    // something else... 
    console.log(params); 
} 

對象的屬性(from_emailto_emails & cc_emails)是undefined當我打電話給模塊B中的console.log

我試圖用console.trace調試,但控制檯不顯示任何涉及更改對象的函數。我也嘗試使用Object.observe來捕捉更改對象的行爲,但未檢測到更改。

有些人可以教我一些調試技術來跟蹤Marionette中的函數調用和事件。

的情況是:

  1. 我們的代碼庫是巨大的。
  2. 我是我們公司的新人,所以我不確定是否有其他功能或事件涉及。
  3. 我現在是唯一的前端開發人員。
+0

聽起來像你只是很難理解代碼庫中發生了什麼。如何在觸發事件並在觀看該對象時瀏覽代碼時放置斷點? – dchapman

回答

0

好消息:這裏沒有什麼特別的關於木偶。每天的JavaScript調試技術將幫助你。噩耗:如您所知,調試大型事件驅動應用程序的難度爲難度爲

你可能需要在Chrome瀏覽器開發工具,這些步驟(因人而異與其他瀏覽器):

  1. 斯普利特App.trigger線去的參數對象的引用:

let options = { from_email: ... } 
App.vent.trigger('Tracked:Email:send', options); 
  1. Set a breakpoint on Ext.vent.trigger a nd運行你的代碼。

    當執行在斷點處暫停時,檢查options是否包含期望值。如果沒有,問題在App.vent.trigger之前。查找影響tracking_data的任何函數call stack。如果由異步代碼填充,您可能需要檢查異步複選框。

    如果options包含您期望的值,繼續...

  2. 雖然執行暫停使用控制檯保存的全局引用您的參數對象:

> OPTIONS = options 
  • 添加OPTIONS作爲watch expression。展開該項目,以便您可以觀察其屬性的更改。

  • 逐步通過(包括木偶和骨幹代碼),直到您看到OPTIONS屬性更改。如果在步入App.vent.trigger時看不到木偶編碼,則可能需要從black boxed libraries中刪除木偶。

  • +1

    我跟蹤了這​​個問題,似乎後端球員改變了tracking_data的屬性。這就是爲什麼tracking_data.sender,tracking_data.to&tracking_data.cc未定義。我應該從一開始就看到這一點,愚蠢的我。但無論如何,感謝教給我一種調試技術,這將在未來幫助我。這是我的第一份工作,所以它有點艱難。 – Chris

    +0

    在那裏你已經學會了所有最重要的調試工具 - [Occam的剃刀](https://en.m.wikipedia.org/wiki/Occam%27s_razor):首先嚐試最簡單的解釋:-) – joews