Регистрация консоли на ember js

Я просто хотел бы спросить, почему, когда вы печатаете на консоли на ember, это дает вам строку? но если вы нажимаете на него, это дает вам функцию?

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

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

console.log(typeof sample); // function

Может кто-нибудь объяснить это, пожалуйста? Помимо их документации, которую трудно понять. Это действительно тяжело отлаживать на ember, даже с инжектором ember. Есть ли какой-либо инструмент или способ правильно отладить ember.

Ответ 1

Что касается отладки 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; , так что вы можете проверить в своей консоли, что находится в контроллере или в параметрах модели. Вы должны ввести только controller в вашей консоли в Developer Tool of Chrome.