Ember JS中的控制台日志记录

14

我只是想问一下,为什么在 Ember 上在控制台上打印输出时会得到一个字符串,但如果你对它进行 typeof 操作,它会给你一个函数?

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

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

console.log(typeof sample); // function

有人能解释一下这个问题吗?除了他们难以理解的文档之外。在Ember上进行调试真的很困难,即使使用Ember Inspector也是如此。有什么工具或方法可以正确地调试Ember吗?

2个回答

16

关于 Ember 的调试,您可能已经阅读了这篇文章:https://guides.emberjs.com/release/configuring-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

当你运行你的Ember应用程序时,你的应用程序将被包装在一个容器中,因此如果你需要访问属性或变量,你必须使用这个 - 假设你的应用程序名称是“App”:

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

了解如何调试你的Ember应用可能需要一些时间,但是学习并投入更多时间是值得的,因为以后会非常方便。

如果您有任何问题,请不要犹豫评论,我们可以解决它。

关于调试器;

它就像一个断点,你可以停止代码执行。在Chrome中必须打开"检查元素"/"开发者工具"。这里有一个简单的例子: http://jsbin.com/cugetoxoyira/45

源代码: http://jsbin.com/cugetoxoyira/45/edit 在第18行,有一个debugger;,所以你可以在控制台中检查控制器或模型参数。在Chrome的开发者工具中,只需输入controller即可。


我明白了,谢谢。所以有更多的调试选项。如果您不介意,您能详细说明一下是哪些选项吗?根据我在这里看到的 https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-runtime/lib/system/core_object.js#L536-L556 它返回一个对象,因此我们可以访问一些属性,但为什么 typingOf 打印出一个函数?我不太明白。在代码中放置 debugger?这是类似于断点吗?是的,完全理解 Ember 确实需要时间,我正在投入时间和精力。希望它会有所回报(担心)。 - olanchuy
我在我的答案中加入了调试器,并且你也可以在jsbin.com上看到一个小例子... JSBin是一个很棒的网站,可以学习和玩耍代码片段...所以如果你想解决一些简单的问题,但是卡住了,你也可以与我们分享。 - Zoltan
Balint有一系列非常棒的免费屏幕录像系列,你应该去看看:http://balinterdi.com/,同时你也可以找到很多有用的文章。 - Zoltan
我明白了,我会查看http://balinterdi.com/。为什么Emberjs的学习曲线难以掌握?即使他们的文档也不是很好。嗯,我相信那句话:“如果你不能很好地解释它,那就说明你没有完全理解它”,哈哈,无论如何,感谢您的快速响应和屏幕录像。 - olanchuy
Ember的URL现在返回404错误,我猜测它现在应该指向https://guides.emberjs.com/v2.14.0/configuring-ember/debugging/,但我不确定。 - Liam
显示剩余5条评论

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接