2016-12-04 4 views
0

Ich versuche eine Drittanbieter-API in meine meteor.js-App zu integrieren. So ist die Idee, wenn auf /blog Route, sollte die App external Klasse Methode aufrufen.Methode aus importierter Klasse undefined

router.js:

import blog from '../imports/scripts/blog'; 
FlowRouter('/blog', { 
    name: 'blog', 
    action: function(params) { 
    blog.init(); // here I get the error "init is not a function" (it's undefined) 
    } 
}); 

blog.js:

export default class Blog { 
    constructor(){ 
    ... 
    } 

    init() { 
    console.log('init blog api'); 
    ... 
    } 
} 

ich die neueste Meteor mit (1.4.2.3) und die folgenden npm Pakete um ES2015 zu aktivieren:

"babel-cli": "^6.18.0", 
"babel-core": "^6.18.2", 
"babel-loader": "^6.2.8", 
"babel-preset-es2015": "^6.18.0", 
"babel-runtime": "^6.18.0", 
"meteor-node-stubs": "^0.2.4", 
"webpack": "^1.13.3" 

Ich vermisse etwas in meinem Setup, das ichnicht anrufen kann?

+2

Sie brauchen 'var Blog = new Blog() zu tun;' und sie dann wird init haben - 'blog.init()' –

+0

Sie exportieren eine Klasse, keine Instanz davon. Sie sollten 'Blog importieren '../ imports/scripts/blog'; und dann' const blog = new Blog(); '. –

Antwort

1

Ich denke, Sie versuchen, Importklasse (nicht Klasseninstanz). Daher können Sie keine Methoden aufrufen.

Änderung blog.js Sie so etwas wie:

class Blog { 
    constructor(){ 
    ... 
    } 

    init() { 
    console.log('init blog api'); 
    ... 
    } 
} 
export default new Blog(); 
+1

[Tun Sie das nicht] (http://stackoverflow.com/a/39079929/1048572). – Bergi

0

Also das von Yan Mayatskiy und Gothdo in ihren Kommentaren, vielen Dank für das beantwortet wird. Falls jemand war auf der Suche nach der richtigen Antwort:

Ich brauchte die Klasse I eingeführt, wie dies zu instanziiert:

import Blog from 'blog'; 
const blog = new Blog(); 
blog.init(); 
Verwandte Themen