• 优雅的knockout.js + JQuery


    前段时间安装了VS2012的旗舰版,发现在自动创建的项目中自带了一个knockout.js的文件,Google之后发现这是一个js类库,而且非常好用。特别是结合JQuery来做一些数据绑定列表,和实现一些无刷新操作的时候非常简单。在官网上学习了下,并且依样画芦的做了几个demo,下面抽出其中一个最常用的例子和大家分享。

     先看下效果图:

     

     

    具体代码实现: 

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <base href="http://learn.knockoutjs.com/" />
     5     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
     6     <script type='text/javascript' src='/Scripts/Lib/knockout-2.1.0.js'></script>
     7     
     8     <script type='text/javascript' src='/scripts/lib/sammy.js'></script>
     9     
    10     <link rel="Stylesheet" href="/Content/App/coderunner.css" />
    11     <link rel="Stylesheet" href="/Content/TutorialSpecific/webmail.css" />
    12 </head>
    13 <body>
    14 <ul class="folders" data-bind="foreach: folders"><!-- 循环遍历viewModel中的数据 -->
    15     <li data-bind="text: $data, 
    16                css: { selected: $data == $root.chosenFolderId() },
    17                click: $root.goToFolder"></li><!-- text: $data 获取数据的值  } -->
    18 </ul>
    19 
    20 <table class="mails" data-bind="with: chosenFolderData"><!-- 验证数据源是否为null -->
    21     <thead><tr><th>From</th><th>To</th><th>Subject</th><th>Date</th></tr></thead>
    22     <tbody data-bind="foreach: mails"><!-- 循环遍历一个从后台返回的IEnumerable<mails>的json数据 -->
    23         <tr data-bind="click: $root.goToMail"><!-- 调用函数 -->
    24             <td data-bind="text: from"></td><!-- 具体数据内容 -->
    25             <td data-bind="text: to"></td>
    26             <td data-bind="text: subject"></td>
    27             <td data-bind="text: date"></td>
    28         </tr>     
    29     </tbody>
    30 </table>
    31 
    32 <div class="viewMail" data-bind="with: chosenMailData"><!-- 验证数据源是否为null -->
    33     <div class="mailInfo">
    34         <h1 data-bind="text: subject"></h1><!-- 具体数据内容 -->
    35         <p><label>From</label><span data-bind="text: from"></span></p>
    36         <p><label>To</label><span data-bind="text: to"></span></p>
    37         <p><label>Date</label><span data-bind="text: date"></span></p>
    38     </div>
    39     <class="message" data-bind="html: messageContent" />
    40 </div>
    41    
    42     <script type="text/javascript">
    43             function WebmailViewModel() {
    44     // Data
    45     var self = this;
    46     self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
    47     self.chosenFolderId = ko.observable();//监控id
    48     self.chosenFolderData = ko.observable();//监控数据列表
    49     self.chosenMailData = ko.observable();//监控详情数据
    50     
    51     /*self.goToFolder = function(folder) { 
    52          self.chosenFolderId(folder); 
    53          self.chosenMailData(null); // Stop showing a mail
    54          $.get('/mail', { folder: folder }, self.chosenFolderData);//self.chosenFolderData这一步其实就是获得数据(简写的方式)
    55          };
    56          
    57     self.goToMail = function(mail) { 
    58         self.chosenFolderId(mail.folder);
    59         self.chosenFolderData(null); // Stop showing a folder
    60         $.get("/mail", { mailId: mail.id }, self.chosenMailData);
    61     };*/
    62     
    63     self.goToFolder = function(folder) { location.hash = folder };//location.hash可以用来获取或设置页面的标签值,在地址栏里显示出路径
    64     self.goToMail = function(mail) { location.hash = mail.folder + '/' + mail.id };
    65      
    66     Sammy(function() {
    67         this.get('#:folder', function() {
    68             self.chosenFolderId(this.params.folder);
    69             self.chosenMailData(null);
    70             $.get("/mail", { folder: this.params.folder }, self.chosenFolderData);
    71         });
    72 
    73         this.get('#:folder/:mailId', function() {
    74             self.chosenFolderId(this.params.folder);
    75             self.chosenFolderData(null);
    76             $.get("/mail", { mailId: this.params.mailId }, self.chosenMailData);
    77         });
    78         
    79         this.get('', function() { this.app.runRoute('get', '#Inbox') });
    80     }).run();
    81     
    82     self.goToFolder('Inbox');
    83 };
    84 
    85 ko.applyBindings(new WebmailViewModel());
    86     </script>
    87 </body>
    88 </html>


    Demo:Knockout.js完整实例 

  • 相关阅读:
    centos7/RHEL7安装LibreOffice
    CentOS7开机启动管理systemd简介及使用
    Vim使用技巧
    16_用LVM扩展xfs文件系统(当分区空间不够时)
    15_RHEL7挂载NTFS分区
    14_RHEL7安装mplayer
    polyfill-eventsource added missing EventSource to window ie浏览器 解决方案
    关于vue,webpack 中 “exports is not defined”报错
    2018 vue前端面试题
    Error: No PostCSS Config found in... 报错 踩坑记
  • 原文地址:https://www.cnblogs.com/zhangliangzlee/p/2708169.html
Copyright © 2020-2023  润新知