MVVM js 庫JsRender/JsViews和knockoutjs介紹


MVVM概念

MVVM的解釋有很多,拋開抽象的描敘我想最實用的一點是把UI和數據綁定,事件做成了一種靜態契約,也就是模版,同時UI和數據可以獨立動態變化。WPF,SL相對Winfrom和asp.net webform實際上的實現方式是把以前在后台的綁定和聲明移到了UI頁面。Js 來實現MVVM更有優勢,因為js是動態語言,html也可以動態解析,真正和平台無關。目前mvvm js庫比較熱門的有JsRender/JsViewsknockoutjs。下面具體了解下這兩個庫。

實例說話

JsRenderSample

引入js:

<script src="/script/jquery-1.7.js" type="text/javascript"></script>

    <script src="/script/jsrender.js" type="text/javascript"></script>

Html:

<div id="movieList">

    </div>

模板:

<script id="movieTemplate" type="text/x-jsrender">

    <div>

       {{:#index+1}}: <b>{{>name}}</b> ({{>releaseYear}})

    </div>

</script>

Js:

<script type="text/javascript">

        var movies = [

                   { name: "The Red Violin", releaseYear: "1998" },

                   { name: "Eyes Wide Shut", releaseYear: "1999" },

                   { name: "The Inheritance", releaseYear: "1976" }

              ];

        // Render the template with the movies data and insert

        // the rendered HTML under the "movieList" element

        $("#movieList").html($("#movieTemplate").render(movies));

    </script>

從最后一行js代碼就可以了解jsrender是怎么用的了:容器+模版+數據。

Knockout example:

引入js:

<script src="/script/knockout-2.2.1.js" type="text/javascript"></script>

Html:

<div>

        <p>

            First name: <strong data-bind="text:firstName">todo</strong></p>

        <p>

            Last name: <strong data-bind="text:lastName">todo</strong></p>

    </div>

Js:

<script type="text/javascript">

        // 數據

        function AppViewModel() {

            this.firstName = "Bert";

            this.lastName = "Bertington";

        }

        //注冊

        ko.applyBindings(new AppViewModel());

    </script>

Knockout實際上也支持模板,如果是模版,用法和jsrender很像。可以看到knockout可以更好的在UE和coder間轉換。

總結

JsRender/JsViews:

 jsRender使用模板填充數據最終得到一串html,而不管后面數據的變化。解決了binding,沒有解決command。隨后,jsviews出來了,加上jquery.observable.js,jquery.observable.js可以監聽數據的更改。解決了command的問題。JsRender/JsViews沒有使用注入綁定,保持了html代碼的干凈,但是感覺要寫更多代碼,另外必須得把js跑起來才能看到效果,對不會js的UI 設計者帶來難度。所以學習起來,JsRender/JsViews的廣度和難度更高,並且到目前為此,學習資源基本上只有github上的源碼和demo。以及個別大牛的介紹http://msdn.microsoft.com/zh-cn/magazine/hh882454.aspx.不過,對於愛學習有鑽勁的人來說,看了jsRender和jquery.observable.js后,估計這兩個庫不定日后也可以用來恰當好處的解決其他的問題。

knockoutjs:

使用代碼注入綁定數據和command,同時要支持模板,在這兩項上已經覆蓋了JsRender/JsViews的功能。如它首頁上宣傳的:

  1. 通俗易懂的語法綁定數據模型和Dom
  2. 數據模型更改后,界面UI自動更新
  3. 數據模型間可以建立關系鏈,輕松實現多個數據模型間的重組構造出新的數據
  4. 快速構建基於數據模型的復雜可嵌套UI組件。

官方網站有詳細的各種demo,api文檔等,其他實際應用也有放出來。推薦看英文版的幫助文檔,原滋原味不枯燥,中文翻譯過來后,始終會丟失掉一些東西。

擴展

對於不管平台的純web前端來說,以上基本夠用,但是對於身兼服務端和前端的苦逼還是希望更多一點的包裝,Knockoutjs要是在vs里面像各種view engine一樣使用就更好了,沒有intelligence的日子太痛苦了。knockoutmvc就是這種急人所急的產品,為吸引關注度,特提供首頁快照:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM