2016-08-06 5 views
0

Ich erstelle Flottenmanagement-Anwendung, habe ich für Fahrzeuge 'Marken und Modelle eingerichtet und ich habe One-to-Many-Beziehung in meinem Datenbankmodell eingerichtet.Zugriff auf Vorlage Params EJS Express

Ich versuche, das Fahrzeug mit seinen Modellen macht zusammen zu präsentieren, ist es jedoch nicht zu funktionieren scheint, unten ist der Code aus meiner Routen-Datei:

router.get("/new",function(req,res){ 
    var selectedMake; 
    Make.find({},function(err,result){ 
     if(err){ 
      console.log("an error occured while fetching the data"); 
     }else{ 
      if(req.query.id){ 
       Make.findById(req.query.id,function(err,foundMake){ 
        console.log("found the query string"); 
        selectedMake = foundMake; 
        console.log(selectedMake); 
       }) 
      } 
      res.render("vehicles/newvehiclemake",{makes:result,selected: selectedMake});   
     } 
    }) 

}); 

und hier ist der Code, wo ich versuche Variable zuzugreifen „ausgewählt“ in meinem .ejs

<div class="row"> 
    <div class="col-md-9 col-md-offset-3"> 
     <table class="table table-striped"> 
       <tr> 
        <th>Available Models</th> 
       </tr> 
       <% if(selected) { %> 
       <% selected.models.forEach(function(model){ %> 
       <tr><td><%= model.name %></td></tr> 
       <% }) %> 
       <% }else { %> 
       <tr><td>No Models available for the selected Make</td></tr> 
       <% } %> 
     </table> 
    </div> 
</div> 

die Zweig-Datei in den ausgewählten soll, wird ausgeführt werden nie erreicht und ich bekomme immer ist keine Modelle für die Stellen ausgewählt

irgendwelche Hinweise?

Antwort

0

Ich denke, das ist, weil Ihre Make.findById Methode ist ein asynchronous Anruf. So wird Ihr Rückruf function(err,foundMake) nach dem res.render

aufgerufen. Verschieben Sie Ihren Render-Aufruf in die Callback-Funktion, dann sollte es funktionieren.

 if(req.query.id){ 
      Make.findById(req.query.id,function(err,foundMake){ 
       console.log("found the query string"); 
       selectedMake = foundMake; 

       // after the findById call finished, now it has value. 
       console.log(selectedMake); 

       // res.render should be called at this moment. 
       res.render("vehicles/newvehiclemake",{makes:result,selected: selectedMake}); 
      }) 

      // you would see this line is called before the data is ready. 
      console.log(selectedMake); 

     } 
+0

Danke mein Schatz, es hat funktioniert! – Abdallah

Verwandte Themen