2011-09-28 89 views
0

我在與驗證在貓鼬的數組屬性的一些問題,以驗證陣列性能。貓鼬失敗

當我使用下面的定義,我shouldFail方法不會被調用,並且記錄總是保存。

shouldFail = (val) -> 
    console.log "Fail method called with value:" 
    console.log val 
    return false 

definitions: 
    english: [ 
    type: String 
    validate: [ shouldFail, "testing" ] 
    required: true 
    ] 

但是如果我設置了驗證,如下,調用該函數和記錄不會被保存。

Sense.path('definitions.english').validate (val) -> 
    console.log "Validating English" 
    console.log val 
    return false 

我寧願儘可能使用原定義風格。我只是想知道如果我在我的定義中做錯了什麼。那是你如何定義數組的驗證?

而且我不知道如果我設置english的方式影響着這一點。我只是在做definitions.english = [ ]並試圖保存。

回答

2

我不認爲你需要的[]英語:,與在CoffeeScript的編譯器代碼擺弄它呈現出來的方式錯了,如果你有他們。這可能就是爲什麼你的驗證不能以這種格式工作。儘量只:

definitions: 
    english: 
    type: String 
    validate: [ shouldFail, "testing" ] 
    required: true 
+0

你說得對。 Coffeescript出現了不同於我的預期。對於Mongoose中數組屬性的定義,我仍然有點困惑。我將編輯我的問題,因爲這裏沒有足夠的空間來格式化。 –

+0

等等,我想我現在明白了。我需要類型周圍的數組標記。所以我的定義將是相同的,除了'type:[String]'...我想。 –

+0

如果我在JS中定義它,我會做'定義:({english:{type:String,validate:[shouldFail,'testing'],required:true}})'不過你可以通過coffeescript是要走的路(我認爲這是刪除英語[]:並使用indentions,所以它定義爲一個對象,而不是一個數組。 – Logos

1

我可以看到這個問題,選擇答案都是很老,但我認爲它可能仍然是更詳細地說明一點有用的。

看來you can't validate a single element of an array。而是在整個數組上運行驗證,並根據需要循環訪問它的值。

假設valid是驗證一個單個元素的功能:

definitions: 
    english: 
    type  : [ String ] 
    validate : 

     validator : (values) -> 
     for value in values 
      if not (valid value) then return false 
     return true 

     msg  : "At least one not valid" 

    ] 

通過設置required標誌我想你想確保至少有一個元素是在數組中。爲了達到這個目的,添加另一個類似的驗證對象:

definitions: 
    english: 
    type  : [ String ] 
    validate : [ 
     validator : (values) -> values.length # 0 is a falsy value 
     msg  : "At least one required"     
    , 
     validator : (values) -> 
     for value in values 
      if not (valid value) then return false 
     return true 
     msg  : "At least one not valid" 
    ] 
    ]