2016-08-06 55 views
0

我正在创建车队管理应用程序,我已经设置了车辆的制造和模型,并且在我的数据库模型中建立了一对多关系。访问模板params ejs express

我想目前的车辆使连同它的车型,但是,它似乎并没有工作,下面是从我的路线文件中的代码:

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});   
     } 
    }) 

}); 

这里是代码,其中我试图访问变量“中选择”在我的.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> 

永远达不到在选择时应该执行的分支,我总是得到可供选择的无模特让

任何线索?

回答

0

我认为这是因为你的Make.findById方法是一个asynchronous调用。所以你的回调function(err,foundMake)res.render

之后被调用,将你的渲染调用移动到回调函数中,然后它就可以工作。

 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

谢谢亲爱的工作! – Abdallah