2016-06-13 10 views
1

CONTEXTvon Callback-Methode in Meteor mit Mantra Passing Wert

ich das Mantra Architektur mit Meteor 1.3 und Astronomy mit meinen Sammlungen zu verwalten. Ich versuche, die ID des eingefügten Objekts durch die Meteor Callback-Funktion zu übergeben, um es in meinem Container zu verwenden.

PROBLEM ich die richtige Id, wenn ich das Element in der Methode Konsole anmelden, aber nicht definiert erhalten, wenn es (aus der Datei von einer höheren Schicht zu trösten versucht, sich einzuloggen, dass meine Aktion hält, die den Methodenaufruf Meteor ruft). Ich muss es dann von meinen Aktionen an den Container übergeben, der es benutzt.

Methode (im Server)

export default function() { 
    Meteor.methods({ 
    'condition.create'(conditionTitle, conditionType, segmentId) { 

     const condition = new Conditions(); 

     // Show the latency compensations 
     Meteor._sleepForMs(500); 

     // XXX: Do some user authorization 
     // website._id = _id; 
     condition.conditionTitle = conditionTitle; 
     condition.segmentId = segmentId; 
     condition.conditionType = conditionType; 


     condition.save(function(err, id) { 

     const conditionId = id; 
     return conditionId; 

     }); 


    } 
    }); 

} 

Actions Datei (wobei der Anruf erfolgt, - Client-Seite)

export default { 
    create({Meteor, LocalState, FlowRouter}, conditionTitle, conditionType, segmentId) { 
    LocalState.set('CREATE_CONDITION_ERROR', null); 

    if (!conditionTitle) { 
     return LocalState.set('CREATE_CONDITION_ERROR', 'Condition Title is required!'); 
    } 

    if (!conditionType) { 
     return LocalState.set('CREATE_CONDITION_ERROR', 'Condition Type is required!'); 
    } 


    if (!segmentId) { 
    return LocalState.set('CREATE_CONDITION_ERROR', 'segmentId is required.'); 
    } 

    LocalState.set('CREATE_CONDITION_ERROR', null); 




    Meteor.call('condition.create', conditionTitle, conditionType, segmentId, function(err, conditionId) { 

     if (err) { 
      return LocalState.set('CREATE_CONDITION_ERROR', err.message); 
     } else { 
      console.log("method" + conditionId); 
     } 
    }); 

    }, 

    clearErrors({LocalState}) { 
    return LocalState.set('CREATE_CONDITION_ERROR', null); 
    } 
}; 

Container (Teil Schnipsel auf Client - dies ist, wo Ich brauche die Bedingung zu nutzenId)

onSubmit(event) { 
    event.preventDefault; 
    const {create, segmentId} = this.props; 
    const conditionTitle = this.state.conditionTitle; 
    const conditionType = this.state.conditionType; 

    create(conditionTitle, conditionType, segmentId, function(conditionId) { 

     console.log(conditionId); 

    }); 


    } 

Antwort

1

Das Problem hatte nichts mit Mantra zu tun. Ich habe das eingefügte Objekt innerhalb der Astronomy-Funktion .save zurückgegeben, aber diesen Wert nicht an die gesamte Meteor-Methode übergeben. Daher das Undefinierte.

Das war die richtige Methode auf dem Server:

Meteor.methods({ 
    'condition.create'(conditionTitle, conditionType, segmentId) { 

     const conditionAstro = new Conditions(); 

     // Show the latency compensations 
     Meteor._sleepForMs(500); 

     // XXX: Do some user authorization 
     // website._id = _id; 
     conditionAstro.conditionTitle = conditionTitle; 
     conditionAstro.segmentId = segmentId; 
     conditionAstro.conditionType = conditionType; 


     const condition = conditionAstro.save(function(err, id) { 

     // const conditionId = id; 
     console.log(id); 
     return id; 

     }); 

     return condition; 


    } 
    }); 
Verwandte Themen