2015-01-05 43 views
0

我遇到了使用相同複雜類型的兩個數據屬性的場景。以下是使用的實體。用於單個複雜類型數據屬性的多個驗證器

{ 
     "name": "dataProperty1", 
     "complexTypeName": "ComplexType:#test" 
    }, 
    { 
     "name": "dataProperty2", 
     "complexTypeName": "ComplexType:#test" 
    } 

的ComplexType:

{ 
    "shortName": "ComplexType", 
    "namespace": "test", 
    "isComplexType": true, 
    "dataProperties": [ 
      { 
      "name": "fieldA", 
      "dataType": "String", 
      "maxLength": 50 
     } 
] 
} 

現在我的問題是,無論是數據屬性(dataProperty1和dataProperty2)的具有複雜類型數據屬性(FIELDA)特定的驗證。

我試圖爲複雜的數據屬性(fieldA)添加兩個不同的驗證器,但兩個驗證器都爲這兩個數據屬性執行。

  { 
       "name": "fieldA", 
       "dataType": "String", 
       "maxLength": 50, 
       "validators"[ 
         { 
         //name :validationA 
         }, 
         { 
         //name :validationB 
         } 
       ] 
      } 

我們先來說說「dataProperty1」只有「validationA」需要執行和「dataProperty2」只有「validationB」需要執行。

對於這種情況,有什麼特別需要處理的東西?

請幫助解決此問題。

在此先感謝。

回答

0

在您的驗證函數中,'context'參數將具有'propertyName'屬性。這個'propertyName'將是你的財產的路徑,所以你可以區分'billingAddress'和'locationAddress'。此外,如果您驗證complexType的子屬性,則'context.propertyName'將成爲屬性的虛線路徑,即類似'billingAddress.city'和'locationAddress.city'。

所以,你可能會寫這樣的

var valFn = function (v, context) { 
    var propName = context.propertyName; 
    // change the validation logic here depending on the 'propName'; 
    }; 
    var myValidator = new Validator("MyValidator", valFn, 
     { messageTemplate: "Custom message template..." }); 
+0

我能夠在驗證獲取屬性名稱的驗證,但我怎麼想跳過已經在微風中註冊的驗證。假設只需要爲'billingAddress.city'執行一個驗證程序,但兩個驗證程序已針對「城市」複雜類型屬性註冊。或者,有沒有什麼辦法對不同數據屬性中使用的同一複雜類型屬性進行兩種不同的驗證? –

+0

驗證器檢查propertyName並執行noop(如果不相關)。即驗證器將始終執行,但對於除「billingAddress.city」之外的任何「城市」屬性,它都將成功。 –

+0

我想我讓它更復雜。簡單來說,需要的驗證器存在於名爲「城市」的複雜類型數據屬性中。複合類型由兩個數據屬性「property1」和「property2」使用。現在,我希望這個城市只需要'property1'而不是'property2'。對這種情況有何建議? –