2016-12-24 15 views
0

我想知道如何只允許某些新的字段在一個現有的或新的對象,但沒有義務總是這些領域的所有。允許字段,但沒有義務在火力基地規則和驗證

例如,我想驗證產品對象 我允許像名稱,尺寸,價格,高度,寬度和沒有其它未列出的字段,但在同一時間對象的字段是有效的,其將具有隻有一些這個領域。

".validate": "newData.hasChildren(['name', 'size','price', 'height', 'width',])" 

所有字段都有義務,我想。所以沒有高度或寬度的新產品將無效。但我希望它們仍然有效,但不允許有人發明根本沒有列出的新領域。

這需要與現有和新產品一起工作。 在此先感謝您的提示。

回答

1

要僅允許所需的字段,請使用wildcard location(以$開頭的規則)。這將匹配您已經指定的任何路徑而不是

docs ...

動態$變量也可以在不斷 路徑名並聯使用。在這個例子中,我們使用$ other變量 聲明一個.validate規則,確保widget沒有標題和顏色以外的子項 。任何會導致創建額外的 孩子的寫入都會失敗。

{ 
    "rules": { 
    "widget": { 
     // a widget can have a title or color attribute 
     "title": { ".validate": true }, 
     "color": { ".validate": true }, 

     // but no other child paths are allowed 
     // in this case, $other means any key excluding "title" and "color" 
     "$other": { ".validate": false } 
    } 
    } 
} 

作爲去除義務要匹配所有的規則,你可以做他們在做例如上面啥子。您也可以使用OR作爲驗證規則的一部分:

".validate": "newData.hasChild('name') || newData.hasChild('size') || newData.hasChild('price')" 
+0

感謝您的詳細信息。這意味着我基本上在我的所有對象和子對象中使用「」$ other「:{」.validate「:false},以防止任何人創建未命名的新子對象。我也喜歡某些情況下的替代版本。我想我現在可以用你的幫助來設置所有的東西。爲我更清晰... – Oliver

+0

真棒@Oliver!如果信息爲您解決了規則問題,請標記爲解決方案。 – Lyla