2014-10-16 55 views
10

我只想問,爲什麼當你在控制檯上打印出的餘燼上它會給你一個字符串?但如果你鍵入它,它會給你一個函數?控制檯登錄餘燼js

ex. sample = Ember.Route.extend(); 

console.log(sample); // prints (subclass of Ember.Route) 

console.log(typeof sample); // function 

有人可以解釋這個嗎?除了他們很難掌握的文檔之外。即使在使用燼檢查器的情況下,也很難在燼debug上進行調試。有沒有任何工具或方法來正確調試燼。

回答

13

在餘燼調試方面,你可能已經閱讀:http://emberjs.com/guides/understanding-ember/debugging/

有幾個偉大的功能,你可以在開發過程中導通,以獲得更多的信息,什麼是引擎蓋下發生。

您可以在app.js插入:

var App = Ember.Application.extend({ 
    LOG_TRANSITIONS_INTERNAL: true, 
    LOG_ACTIVE_GENERATION:  true, 
    LOG_VIEW_LOOKUPS:   true, 
    LOG_RESOLVER:    true, 
}); 

Ember.run.backburner.DEBUG   = true; 
Ember.ENV.RAISE_ON_DEPRECATION  = true; 
Ember.LOG_STACKTRACE_ON_DEPRECATION = true; 
Ember.LOG_BINDINGS     = true; 
Ember.RSVP.on('error', function(error) { 
    Ember.Logger.assert(false, error); 
}); 

,如果你在你的代碼編寫debugger您可以停止你的代碼。我經常用它來弄清楚發生了什麼。

就你的問題而言,如果你擴展一個Ember類,它基本上會創建一個新的函數,但其​​行爲類似於擴展類的子類。您可以檢查所發生的事情有:https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-runtime/lib/system/core_object.js#L536-L556

當你運行你的灰燼應用程序,你的應用程序會被包裹在一個容器,所以如果你需要訪問屬性或變量,你必須使用這 - 假設你的應用程序名稱是「應用程序」:

App.__container__.lookup("controller:application").get("currentRouteName") 
App.__container__.lookup("controller:application").get("currentPath") 
App.__container__.lookup("controller:application").get("model") 

這是需要一段時間才能明白你怎麼能調試燼的應用程序,但值得去學習,並在其中投入更多的時間,因爲會很方便以後。

如果您有任何問題,請不要猶豫,我們可以解決它。

關於調試器;

它就像一個斷點,你可以停止代碼。在Chrome中必須打開「檢查元素」/「開發人員工具」。簡單的例子::http://jsbin.com/cugetoxoyira/45

的源代碼:http://jsbin.com/cugetoxoyira/45/edit 在第18行,有一個debugger;,這樣你就可以在控制檯什麼是在控制器或模型PARAMS檢查。您必須在Chrome的開發者工具中的控制檯中輸入controller

+0

我知道了,謝謝。所以有更多的選項可供調試。你能不能介紹一些細節,如果你不介意的話? 正如我在這裏可以看到https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-runtime/lib/system/core_object.js#L536-L556它返回一個對象,這就是爲什麼我們可以訪問它的一些屬性,但爲什麼打印它打印一個函數?我不太明白。 把'debuggger'放在代碼上?這就像一個斷點?要麼? 是的,真正需要時間才能完全理解好餘燼,我在這方面投入了我的時間和精力。希望它會支付(擔心) – olanchuy 2014-10-16 21:31:49

+0

這是因爲用於該對象的ember覆蓋toString方法。 'var fun = function(){};/* fun - 'function',typeof fun - 'function'*/fun.toString = function(){return'any string'; }/* fun - 'any string',typeof fun - 'function'* /' – Microfed 2014-10-16 22:46:02

+0

我用調試器擴展了我的答案;你也可以在jsbin.com中看到一個小例子...... JSBin是一個很棒的網站,可以學習和使用片段...所以如果你想解決一些簡單的問題,但不是真的有用,你可以分享我們也是如此。 – Zoltan 2014-10-17 00:13:13