使用nodejs中的其他模型数据填充表单中的下拉列表

时间:2014-01-11 22:22:19

标签: node.js express mongoose pug

我正在尝试使用其他模型(颜色)的数据填充我的某个模型(汽车)的表单的下拉列表,但似乎无法弄清楚如何执行此操作。我需要以某种方式将颜色列表调用到cars.jade文件的下拉列表中,这样当用户选择自动填充列表时,我需要将ObjectID作为项目的值(随后将其保存为新车

汽车新表格(car.jade):

/* This is the bit I'm having trouble with */
select(name='carColours')
  option(value='')
  each colour in colours
    - var select=null; if (colour.title == carColours.title) select='selected';
    option(value=colour._id, selected=select)= colour.title

汽车控制器(cars.js):

exports.new = function(req, res){
  res.render('cars/new', {
    title: 'New Car',
    event: new Car({})
  })
}

汽车模型(car.js):

var CarSchema = new Schema({
  title: {type : String, default : '', trim : true},
  colour: {type : Schema.ObjectId, ref : 'Colour'},
})

颜色模型(colour.js)

var ColourSchema = new Schema({
  title: {type : String, default : '', trim : true},
  hexadecimal: {type : String, default : '', trim : true},
})

ColourSchema.statics = {

  list: function (options, cb) {
    var criteria = options.criteria || {}

    this.find(criteria)
      .sort({'title': 1}) // sort alphabetically
      .exec(cb)
  }

}

1 个答案:

答案 0 :(得分:3)

您在cars.js中进行渲染的调用需要提供颜色列表。

exports.new = function(req, res){
  res.render('cars/new', {
    title: 'New Car',
    event: new Car({}),
    colours: [<list of possible colours>]
  })
}

在视图模板的路径之后传递给render的对象是视图模板运行的上下文。如果该对象没有相关属性(在本例中为colours),那么您的视图模板也不会。 (有一个例外,但它看起来不像你在这里使用它。)

我在我制作的截屏系列的最新一集中进入了这个(http://www.learnallthenodes.com/episodes/9-view-templates-in-nodejs-with-jade)。我不确定我到达那个部分的确切时间戳。