2015-03-10 7 views
13

Ich habe die folgende Klassendefinition:Import Klasse und rufen statische Methode mit es6 Module mit babel Transpiler

class EmberReflux{ 
    static createActions(actions) { 
    console.log(actions); 
    } 
} 

export { EmberReflux }; 

Wenn ich importieren es aus einer anderen Datei:

import EmberReflux from '../utils/ember-reflux'; 

let TodoActions = EmberReflux.createActions(
[ 
    "addItem", 
    "undo", 
    "redo" 
]); 

export { TodoActions }; 

Die transpiled sieht wie folgt aus

define('ember-reflux/utils/todo-actions', ['exports', 'ember-reflux/utils/ember-reflux'], function (exports, EmberReflux) { 

    'use strict'; 

    var TodoActions = EmberReflux['default'].createActions(["addItem", "undo", "redo"]); 

    exports.TodoActions = TodoActions; 

}); 

ich bin mir nicht sicher, was der Standard in EmberReflux['default'] ist

Ich möchte die statische Klasse Methode wie folgt nennen:

EmberReflux.createActions 

Aber stattdessen muss ich es so nennen:

EmberReflux.EmberReflux.createActions 
+2

Versuchen Sie 'Export Standard EmberReflux' – elclanrs

Antwort

17

Sie haben zwei Möglichkeiten:

  1. Export EmberReflux wie Sie tun:

    export { EmberReflux }; 
    

    und importieren Sie es mögen:

    import { EmberReflux } from '../utils/ember-reflux'; 
    
  2. Verwenden default beim Export:

    export default EmberReflux; 
    

    und importieren Sie es (wie Sie tun):

    import EmberReflux from '../utils/ember-reflux'; 
    

In beiden Fällen Sie können dann Ihre EmberReflux wie verwenden:

EmberReflux.createActions(); 
+1

Warum tun wir brauchen den Standard im 2. Beispiel? Mit anderen Worten, warum können wir EmberReflux nicht direkt exportieren? – Ced

+0

Weil Sie im zweiten Beispiel 'EmberReflux' nicht in eine eigene Variable zerlegen. –

4

Ich habe nicht genug Ruf zu kommentieren, die Antwort des alexpods ist perfekt, aber für Angelegenheiten unseres Freundes Verständnis Ced gestellt:

Warum wir tun brauche ich den Standard im 2. Beispiel? Mit anderen Worten, warum können wir EmberReflux nicht direkt exportieren?

Wenn Sie wie folgt geschrieben:

export { EmberReflux }; 

Es ist die gleiche Schrift wie folgt aus:

export { EmberReflux: EmberReflux }; 

Deshalb sollten Sie EmberReflux.EmberReflux laufen müssen, die Lösung ist sehr einfach:

export default EmberReflux;