中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

MVVM架(jia)構~Knockoutjs系列之驗證機制的(de)引入(ru)

返回目錄

對(dui)于Knockoutjs本身來(lai)說,沒有提供(gong)驗證(zheng)模塊(kuai),不過,有第三方的(de)擴(kuo)展,就像你為jquery庫(ku)作extensions一樣,這講中我將介紹一個Knockout插(cha)件擴(kuo)展,knockout.validation.js,用它(ta)來(lai)實現對(dui)HTML標(biao)記的(de)驗證(zheng),

下面是它在(zai)Github上的(de)地址。這個插件的(de)使用(yong)很類(lei)似MVC自(zi)己(ji)(ji)的(de)驗證,如(ru)果你(ni)自(zi)己(ji)(ji)手動擴展過它的(de)ValidationAttribute,那么你(ni)對下面的(de)JS肯定不(bu)會

感到陌生,思想是一樣的,JS里的Validation也是面向對象的,也支持override,比如系統為非空驗證提供的提供是“This field is required.”,你當然可以(yi)重寫它,讓它顯(xian)示“請輸入用戶名”,呵呵,這(zhe)個很(hen)簡(jian)單,下面

看一下某體的代碼:

首先要引(yin)入這兩個JS文件(jian)

  <script src="~/Scripts/knockout-2.1.0.js"></script>
  <script src="~/Scripts/knockout.validation.min.js"></script>

下面的例(li)子中(zhong),分別對(dui)用(yong)戶名,分類ID,價格(ge),Email地址做了數據有(you)效(xiao)性(xing)的驗證(zheng),并(bing)且每個驗證(zheng)中(zhong)的參數都可(ke)以(yi)以(yi)JS對(dui)象(xiang)或者(zhe)屬性(xing)的形(xing)式(shi)存在,這也(ye)足夠靈活了,如(ru)果是JS對(dui)象(xiang)的話,那么params表示參數的值,而message

表示提示的(de)(de)信息,看一(yi)下它的(de)(de)實現(xian)(很面向對(dui)象的(de)(de),呵(he)呵(he))。

<script type="text/ecmascript">
    var Product = function () {
        var self = this;

        self.CategoryId = ko.observable().extend({
            required: true
        });

        self.price = ko.observable().extend({
            required: { params: true, message: "請輸入價格(ge)" },
            min: { params: 1, message: "請輸入大(da)于1的整數" },
            max: 100
        });

        self.name = ko.observable().extend({
            minLength: 2,
            maxLength: { params: 30, message: "名稱最(zui)大長度為30個字符(fu)" },
            required: {
                params: true,
                message: "請(qing)輸入(ru)名(ming)稱",
            }
        });

        self.Email = ko.observable().extend({
            required: {
                params: true,
                message: "Please enter your email"
            },
            email: {
                params: true,
                message: "The format is not correct"
            }
        });



        self.Register = function () {
            self.errors = ko.validation.group(self);
            if (self.isValid()) {
                alert('data sent');
            } else {
                self.errors.showAllMessages();
            }
        };



    }
    var viewModel = new Product();
    ko.applyBindings(viewModel);

</script>

下(xia)面再看(kan)一下(xia)HTML部分,它(ta)與之前(qian)講(jiang)的knockout數據綁定沒有區別

<fieldset>
        <legend>添加商品</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.name)
        </div>
        <div class="editor-field">
            <input data-bind='value: name' />
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.price)
        </div>
        <div class="editor-field">
            <input data-bind='value: price' /><!-- uniqueName: true表示表單的name是唯一的-->
            <div class="editor-label">
                @Html.LabelFor(model => model.CategoryId)
            </div>
        </div>
        <div class="editor-field">
            <input data-bind='value: CategoryId' />
        </div>
        <p>
            <input type="button" value="Create" data-bind="click:Register" />
        </p>
    </fieldset>

事實上(shang),比上(shang)面的(de)(de)(de)知識更重要的(de)(de)(de)是(shi),我認為還是(shi)它的(de)(de)(de)思想,這樣東西都可(ke)以由前臺工程(cheng)(cheng)師去(qu)(qu)開發(fa),然底層開發(fa)人員(asp,.net,php,jsp,ios,android)不需要去(qu)(qu)干預這些,它們只要寫好JS文件去(qu)(qu)調用自己(ji)的(de)(de)(de)方(fang)法即(ji)可(ke),當然JS文件也(ye)可(ke)以以前臺工程(cheng)(cheng)師去(qu)(qu)寫,只不

過,這需要前臺工程(cheng)(cheng)師(shi)等(deng)底層工程(cheng)(cheng)師(shi)把接(jie)口寫好后,再開發(fa)了,呵呵。

看一下效果:

怎么樣(yang),有點MVC的(de)(de)味道吧,呵呵,這個前臺(tai)validation的(de)(de)表現可以由CSS工(gong)程(cheng)師去搞定(ding),不過(guo),一般這活(huo)都是前臺(tai)工(gong)程(cheng)師的(de)(de),嗨,前臺(tai)工(gong)程(cheng)師要負責的(de)(de)東(dong)西可真不少PS切圖(tu),HTML代碼編(bian)(bian)寫(xie),JS代碼編(bian)(bian)寫(xie),CSS樣(yang)式編(bian)(bian)寫(xie),還有如果(guo)是MVVM架構,

他們(men)還要了(le)(le)解(jie)數據庫結構,呵,在(zai)這(zhe)里,讓我代表所有開(kai)發人員說一聲:“前臺工程師,你(ni)們(men)辛苦(ku)了(le)(le)”!

 返回目錄

posted @ 2014-01-06 13:42  張占嶺  閱讀(8139)  評論(8)    收藏  舉報