2014-10-16 10 views
10

Ich möchte nur fragen, warum ist es, dass, wenn Sie auf der Konsole auf Glut drucken es gibt Ihnen eine Zeichenfolge? aber wenn Sie darauf tippen, gibt es Ihnen eine Funktion?Konsole Logging auf Ember js

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

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

console.log(typeof sample); // function 

Kann jemand bitte dies erklären? Abgesehen von ihrer Dokumentation, die schwer zu verstehen ist. Es ist sehr schwierig Ember zu debuggen, sogar mit Ember Inspector. Gibt es ein Werkzeug oder eine Möglichkeit, Ember richtig zu debuggen?

Antwort

13

In Bezug auf die Ember Debuggen Sie wahrscheinlich schon gelesen: http://emberjs.com/guides/understanding-ember/debugging/

Es gibt ein paar große Eigenschaft ist, was Sie während der Entwicklung einschalten kann, um weitere Informationen zu erhalten, was unter der Haube passiert.

Sie können in Ihrem app.js einfügen:

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); 
}); 

Sie Ihren Code stoppen wenn Sie debugger in Ihrem Code schreiben. Ich benutze es oft, um herauszufinden, was dort passiert.

In Bezug auf Ihre Frage, wenn Sie eine Ember-Klasse erweitern, erstellen Sie im Grunde eine neue Funktion, aber verhalten sich wie eine Unterklasse der erweiterten Klasse. Sie können überprüfen, was dort passiert: https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-runtime/lib/system/core_object.js#L536-L556

Wenn Sie Ihre Ember App, App werde in einem Behälter verpackt werden ausgeführt, so dass, wenn Sie den Zugriff auf Eigenschaften oder Variablen benötigen, müssen Sie dies nutzen - davon ausgehen, Ihre App-Namen ist ‚App‘:

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

es ist eine Weile dauern, zu verstehen, wie Sie Ihre ember App debuggen können, aber es lohnt sich zu lernen und in es, mehr Zeit zu investieren, weil ganz später nützlich sein wird.

Wenn Sie irgendeine Frage haben, zögern Sie nicht, zu kommentieren, und wir können es lösen.

Über Debugger;

Es ist wie ein Haltepunkt, Sie können den Code stoppen. "Inspect Element"/"Developer Tool" muss in Chrome geöffnet sein. Kleines Beispiel hier: http://jsbin.com/cugetoxoyira/45

Quellcode: http://jsbin.com/cugetoxoyira/45/edit In Zeile 18 gibt es ein debugger;, so dass Sie in der Konsole überprüfen können, was in der Steuerung oder in Modell params. Sie müssen nur controller in Ihrer Konsole im Developer Tool von Chrome eingeben.

+0

ich sehe, danke. Es gibt also mehr Optionen zum Debuggen. Kannst du ein paar Details angeben, wofür es dich gibt, wenn es dir nichts ausmacht? Wie ich hier sehen kann https://github.com/emberjs/ember.js/blob/v1.7.0/packages/ember-runtime/lib/system/core_object.js#L536-L556 gibt es ein Objekt, warum wir können auf einige Eigenschaften darauf zugreifen, aber warum schreibt man eine Funktion? Ich verstehe es nicht ganz. Putting 'debugger' auf Code? ist das so etwas wie ein Haltepunkt? oder? Ja, es braucht wirklich Zeit, um alles gut zu verstehen, ich investiere meine Zeit und meine Mühe darauf. Hoffe, es wird bezahlen (Sorge) – olanchuy

+0

Das ist, weil Ember toString-Methode für das Objekt überschreibt. 'var Spaß = Funktion() {};/* fun - 'function', typeof fun - 'function' */fun.toString = function() {return 'beliebige Zeichenfolge'; }/* fun - 'any string', typeof fun - 'function' */' – Microfed

+0

Ich habe meine Antwort mit Debugger erweitert; und Sie können ein kleines Beispiel auch in jsbin.com sehen ... JSBin ist eine großartige Website, um mit Schnipsel zu lernen und zu spielen ... also, wenn Sie ein einfaches Problem lösen möchten, aber nicht wirklich funktioniert, können Sie mit teilen uns auch. – Zoltan