Knockout js類庫學習筆記(一)資料繫結

來源:互聯網
上載者:User

KnockoutJS是一個常用的JS架構,目的為減少開發人員在使用JS或JQuery時大量的DOM操作所導致的作業碼複雜且難以理解,並且有助於資料與HTML的分離,在團隊中大家統一認同此架構的前提下,能夠提高開發效率。

本人也是最近開始使用這套架構,並且記錄下一般性的使用心得,以備日後查閱。如果能夠協助大家解決一些自己的問題,實屬超出預計。:)

所有關於下載,API查閱,樣本均在此http://knockoutjs.com/

首先引入Knockout檔案knockout-3.0.0.js和knockout.mapping.min.js兩個必要檔案,Knockout可以獨立於JQuery類庫運行,So Jquery類庫不是必要條件。

Knockout最強大和最常用的工具在於雙向繫結(TwoWay-binding),適用於任何需要綁定資料的情境。使用也很簡單方便。這裡分為多個樣本講解一些常見的binding

HTML(為保證重複利用,這是所有代碼共用之HTML):

        <script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>    <script src="js/knockout/knockout-3.0.0.js" type="text/javascript"></script>    <script src="js/knockout/knockout.mapping.min.js" type="text/javascript"></script>    <script src="js/knockout/koExternalTemplateEngine_all.min.js" type="text/javascript"></script>    <script src="js/JScript1.js" type="text/javascript"></script>        

注意js改為自己的路徑。

樣本一:

簡單observable綁定

    var TestModel = {};    TestModel.FirstName = ko.observable("Arwind");    TestModel.LastName = ko.observable("Gao");    TestModel.FullName = ko.computed(function () {        return TestModel.FirstName() + " " + TestModel.LastName();    });


簡單的一個Model類 對應之HTML

            


JS最後需要添加綁定代碼(這段代碼只需添加在最後,僅需添加一次,之後樣本不再贅述)

    ko.applyBindings(TestModel, document.getElementById("testDiv"));


上面的代碼只能執行一次 若需要相應資料的變化 如ajax請求導致多次綁定,需要多加判斷,例如此Model直接從Json資料mapping過來,則只需再次mapping改變model的值即可改變HTML端:

                    if (TestModel == undefined) {                        TestModel = ko.mapping.fromJS(girds);                        ko.applyBindings(TestModel, document.getElementById("testDiv"));                    }                    else {                        ko.mapping.fromJS(girds, {}, TestModel);                    }


樣本二:

css的綁定

    


HTML

            ooo


樣本三

URL的綁定

HTML

Tecent


Knockout

    TestModel.Url = function () {        return "www.baidu.com";    };


樣本四

子Model嵌套綁定

Knockout

    //with用於子model綁定    TestModel.SubViewMode = [{ Name: "Name1" }, { Name: "Name2"}];    TestModel.SubViewMode2 = { Items: [{ Name: "Name1" }, { Name: "Name2"}] };


HTML

                            
 
  • 1
  • 1


樣本五

事件綁定

HTML

                        


Knockout

    TestModel.ClickTest = function () {        alert("test");    };


樣本六

帶參數的事件綁定

HTML

            


Knockout

    TestModel.ClickJoinName = function (FirstName, LastName) {        alert(FirstName + "," + LastName);    };


樣本七

簡單observable計數器

HTML

                        

Knockout

    TestModel.CountValue = ko.observable(0);    TestModel.ClickCount = function () {        var v = this.CountValue();        this.CountValue(v + 1);    };


先到這裡吧 下次再說..

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.