1

Ich habe eine Javascript-Funktion, die sich beschweren, dass ein Anruf in seinem Körper keine Funktion ist, bevor es aufgerufen wird. Könnte mir bitte jemand helfen, das zu erklären?Javascript-Funktion wird ausgeführt, bevor es aufgerufen wird

Kontext: Ich verwende Meteor und Collection2 und ich möchte eine Funktion für die Wiederverwendung bei verschiedenen Attributen meiner Schemas verwenden. Gerade, würde Ich mag folgendes tun:

function foo (autoVal, self){ 
    if(something){ 
    return autoVal; 
    }else{ 
    return self.unset(); 
    } 
} 

export const myCollection = new Mongo.Collection('myCollection'); 

const Schema = new SimpleSchema({ 
    my_field:{ 
     type:Boolean, 
     autoValue: foo(false,this), 
    } 
}); 

myCollection.attachSchema(Schema); 

Wenn ich diese speichern und ausführen Meteor, es nicht starten und ich erhalte die folgende Fehlermeldung:

TypeError: self.unset is not a function

Ich fühle, dass ich fehlt etwas darüber, wie JavaScript-Funktionen aufgerufen oder ausgeführt werden, kann jemand darauf hinweisen, warum passiert das?

+0

Es ist nicht genug, es zu reproduzieren, was Problem Sie haben. Sie sollten http://stackoverflow.com/help/how-to-ask und [MCVE] – pvg

+0

herausfinden, was 'das' ist, wenn dieser Code ausgeführt wird' autoValue: foo (false, this); '- oh, und erkennen, dass foo ausgeführt wird, bevor 'neues SimpleSchema' aufgerufen wird (auch das ist kein gültiges Javascript, scheint wie das'; 'am Ende von' foo (false, this); 'sollte überhaupt nicht da sein –

+0

' this' ist nicht das 'this', das du suchst. – godfrzero

Antwort

2

Try this:

function foo (autoVal, self){ 
    if(something){ 
    return autoVal; 
    }else{ 
    return self.unset(); 
    } 
} 

export const myCollection = new Mongo.Collection('myCollection'); 

const Schema = new SimpleSchema({ 
    my_field:{ 
     type:Boolean, 
     autoValue() { 
     return foo(false, this); 
     } 
    } 
}); 

myCollection.attachSchema(Schema); 
+0

Das funktionierte dank! Ich werde die Antwort bald akzeptieren es braucht mindestens 7 Minuten, um dies zu tun – EugVal

Verwandte Themen