2015-09-29 51 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', .... });