2015-09-29 52 views
1

我有一个Place架构,该地方有一个类型可以有三个值region, country, city。它们中的每一个类型都有一个单独的Schema和一些相关数据。KeystoneJS变量相关文章

我的问题是;有没有一种方法可以将场所连接到架构内的正确对象?我知道我可以做一个City.find({...})来获取对象数据。

我确实添加了下面的代码,但它不能从管理部分的地方表单中编辑。是否有可能做到这一点?

Place.schema.virtual('data').get(function() { 

    if (this.type == 'country') { 
     var c = Country.findOne({ parent: this }); 
     if (c) { 
      return c; 
     } 
    } 

    if (this.type == 'city') { 
     var c = City.findOne({ parent: this }); 
     if (c) { 
      return c; 
     } 
    } 

}); 

我需要带有名称的位置对象,然后存储在不同模式中的每种类型的数据。 keystone能处理这个吗?

回答

0

你必须创建集合之间的关系:

  1. 在你的地方的模型(Place.js),增加一个字段为每个链接的集合

    Place.add({ 标题:{类型:字符串,必需:true}, 区域:{类型:类型关系,参考: '区域'}, 国家:{类型:类型关系,REF: '国家'}, 城市:{类型:类型。 关系,ref:'City'}, });

  2. 创建每个连接收集的模型:

    Region.add({ 名称:{类型:字符串,必需:true}, 描述:{类型:Types.Html,所见即所得:真的,身高:400} });

    Country.add({ 名:{类型:字符串,必需:真}, 描述:{类型:Types.Html,所见即所得:真,高度:400} });

    City.add({ 名:{类型:字符串,必需:真}, 描述:{类型:Types.Html,所见即所得:真,高度:400} });

  3. 为了有一个选择输入的管理员,你必须在场所定义添加下钻属性(仍然在你的模型)

VAR地方=新keystone.List(“广场”, { map:{name:'title'}, drilldown:'Region', drilldown:'Country', drilldown:'City' });

  • 不要忘了在keystone.js添加路由看到管理员菜单项(注意是复数):

    keystone.set( '导航', { ... 'places':'places', .... });