2014-10-16 80 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