MVVM架構~knockoutjs系列之(zhi)驗證信息(xi)自定義(yi)輸(shu)出
這個文章非(fei)常重要(yao),也是非(fei)常必(bi)要(yao)的,在我們(men)進行項目(mu)開(kai)發時,后臺(tai)(tai)無所(suo)謂,對(dui)樣式無要(yao)求,而網(wang)站前(qian)臺(tai)(tai)來說,對(dui)樣式要(yao)求嚴格,你的驗證信息都是前(qian)臺(tai)(tai)設計好的,所(suo)以,不能使用knockoutjs自帶的了,我們(men)需要(yao)將驗證的消(xiao)息輸(shu)出到指(zhi)定的元素上(shang)!
在(zai)寫(xie)這(zhe)個文章之前(qian),我(wo)一直(zhi)沒有(you)(you)找到(dao)好的(de)(de)辦(ban)法來實現這(zhe)種(zhong)功能(neng),但(dan)我(wo)沒有(you)(you)放棄,終于今(jin)天找到(dao)了比較(jiao)不錯的(de)(de)解決方案,對于一個元(yuan)素(su)的(de)(de)驗證我(wo)們可以使用(yong)isValid()方法,而(er)對于它(ta)(ta)的(de)(de)錯誤消息的(de)(de)顯示,我(wo)們可以使用(yong)error()方法,注意是error()不是errors(),從這(zhe)一點上我(wo)們可以看到(dao),它(ta)(ta)是針對某點元(yuan)素(su)來說的(de)(de),因為它(ta)(ta)是單數(shu),呵呵.
功能實現
Html代碼
<div class="fcs-item clearfix"> <p class="thd"><span class="rstar">*</span> 班級圈名稱:</p> <p class="t-name"> <input class="cname" style="width: 356px;" type="text" name="Title" data-bind="value:title" /> </p> <p class="item-warn" data-bind="visible:!title.isValid(),text:title.error()"></p> <p class="item-warn item-r" data-bind="visible:title.isValid()"> </p> </div> <div class="fcs-item clearfix"> <p class="thd"><span class="rstar">*</span> 班級圈價格:</p> <p class="t-name"> <input class="cname" style="width: 356px;" type="text" name="price" data-bind="value:price" /> </p> <p class="item-warn" data-bind="visible:!price.isValid(),text:price.error()"></p> <p class="item-warn item-r" data-bind="visible:price.isValid()"> </p> </div>
JS代碼
var model = function () { $(".validationMessage").hide();//關閉自動輸出功能 var self = this; self.id = ko.observable('@Model.TeacherInfoExtID'); self.title = ko.observable('@Model.Title').extend({ required: { params: true, message: "請輸入班級(ji)圈名稱" }, minLength: { params: 1, message: "班級圈名稱(cheng)最少為1個字" }, maxLength: { params: 20, message: "班級圈名(ming)稱最多為20個字" } }); self.price = ko.observable('@Model.TeacherPrice.Price').extend({ required: { params: true, message: "請輸入班級圈價格(ge)" }, min: { params: 300, message: "班級圈(quan)價格(ge)最小(xiao)為300" }, max: { params: 500, message: "班級圈價格最大為500" } }); }; var M = new model(); ko.applyBindings(M);
網頁載圖
