0

我想在關係模型 - > WebAPI - > Knockout中實現一個更好的驗證。 現在我已經創建了數據註解,我打算更新和使用IClientValidatable。問題是當前的架構不知道這個模型。 我有這樣的:Web API +敲除驗證

HTML:

<span>Name</span><input type="text" data-bind="value: validationData.name" /> 

JS:

self.validationData = { 
      name: ko.observable('').extend(
       { 
        required: true, 
        minLength: 3, 
        pattern: { 
         message: 'validation message', 
         params: '^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,6}$' 
        } 
       }), 

     }; 

正如你可能會看到我使用knockout.validation.js,現在我想從代碼和使用去除模式它來自一個位置。 舉例來說,我想有這樣的:

self.validationData = { 
      name: ko.observable('').validate() 
     }; 

一般情況下,是有可能使淘汰賽要知道從型號DataAnnotations的?

+1

您可以查看Breeze.js http://www.breezejs.com/,它整合了EF和web.api,並使用knockout爲您提供豐富的客戶端模型,並支持驗證。 – nemesv

回答

0

您可以通過usign的.fn對象

ko.observable.fn.validate = function() { 
    return this.extend({ 
     required: true, 
     minLength: 3, 
     pattern: { 
      message: 'validation message', 
      params: '^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,6}$' 
     } 
    }) 
}; 

http://jsfiddle.net/WzLwS/

添加函數原型觀測到,但你不能從視圖獲取數據的屬性沒有

編輯:您可以得到這個如果您覆蓋值綁定處理程序的行爲,請檢查observable(如果其具有可驗證的可觀察值),然後從元素中提取數據屬性

+1

這看起來不錯!我不認爲這種重寫會做到這一點,因爲在觸發事件之前頁面不知道模型(在這種情況下點擊保存按鈕)。 謝謝! – Goran