2016-02-22 3 views
5

Was ist der beste Weg, auf Document und Window Objekte in ES6/Aurelia Framework zuzugreifen? Ich habe versucht, direkt in meinem Aurelia-Code auf window zuzugreifen, und es scheint zu funktionieren, aber ist das der richtige Weg oder gibt es eine Aurelia/ES6-Art, das zu tun?Zugriff auf Fenster- und Dokumentobjekte in Aurelia?

Insbesondere möchte ich auf Eigenschaften wie window.localStorage und window.sessionStorage zugreifen. Ich fange gerade mit Aurelia und ES6 an, also bin ich ein wenig noob, wie man dieses tut, obwohl ich den Standards folgen möchte.

Etwas wie folgt aus:

constructor() { 
    this.user = JSON.parse(window.sessionStorage.user || window.localStorage.user); 
} 

Dieser Code tatsächlich in Aurelia arbeiten, aber das ist richtig es auf diese Weise zu schreiben?

Antwort

11

Das ist der richtige Weg, es in Aurelia zu machen, wenn man mit Web-APIs arbeitet, also geht es Ihnen gut mit dem Code, den Sie gerade haben.

Wenn Sie mit dem DOM arbeiten, können Sie natürlich auch die Standard-DOM-API verwenden, aber Aurelia verfügt über einen Platform Abstraction Layer (PAL docs), der die Plattform, auf der sich Ihre Anwendung befindet, mit einer DOM-ähnlichen API abstrahiert.

Zum Beispiel das Äquivalent von document.getElementById wäre

import {inject} from 'aurelia-framework' 
import {DOM} from 'aurelia-pal' 

@inject(DOM) 
export class Home { 
    constructor(DOM) { 
    this.DOM = DOM 
    } 

    attached() { 
    let element = this.DOM.getElementById('someId') 
    } 
} 

Leider ist PAL nicht wirklich viel zu tun im Moment, aber in der Zukunft ist es geplant, damit Sie mit Ihrem täglichen DOM-API-Aufrufe arbeiten obwohl Ihre Anwendung möglicherweise nicht in einem "normalen" DOM ​​ausgeführt wird.

Eine sehr wichtige Sache, nicht zu vergessen ist, dass die nativen DOM & Web-APIs wirklich mächtig sind und nichts mit der Verwendung ihrer nativen Implementierungen falsch ist. Andere Frameworks neigen dazu, eine eigene Implementierung rund um die Web-APIs zu erstellen, die auf die Strukturen und Best Practices ihrer Frameworks zugeschnitten ist, aber das ist nicht unbedingt das Beste.

+0

Ich musste deine Antwort zweimal lesen, um zu verstehen, dass ich sie tatsächlich richtig verwendete. Könnten Sie vielleicht den Anfang Ihres Satzes umformulieren, um expliziter zu sein ... Danke für die Antwort :) – ghiscoding

+0

Dies ist eine gute, detaillierte Antwort –

+0

Dies sollte als die angenommene Antwort markiert werden. Hochdetailliert und der Platform Abstraction Layer wird intern in Aurelia-Abhängigkeiten und -Funktionen verwendet, da er Feature-Erkennung und Fallbacks für die meisten Dinge im DOM behandelt. Wenn Sie nur mit '' document.getElementById'' arbeiten oder Dinge abfragen, ist die PAL-Abhängigkeit vielleicht übertrieben, aber für alles, was mit dem Entwickeln von Standards und anderen Features wie Shadow DOM zu tun hat, verwenden Sie den Platform Abstraction Layer . –