前面已经介绍了ko的基本用法,结合官方文档,基本就可以实际应用了。本章作为ko学习的最后一篇,实现一个简单的demo。主要集中在ko,所以后台数据都是静态的。类似于博园,有一个个人文章的分类列表,一个文章列表。可以在文章最后下载工程源代码(包括之前demo的代码)。实现效果图如下:

一、准备数据

  分类信息Kind:

    public class Kind
{
public string Url { get; set; }
public string Name { get; set; }
public int Count { get; set; }
}

  文章信息Essay:

    public class Essay
{
public string Url { get; set; }
public string Name { get; set; }
public short Status { get; set; }
public int Comment { get; set; }
public int PageView { get; set; }
public int RssView { get; set; }
public string Date { get; set; }
}

二、准备模板

  主要html:

<div id="container">
<div id="head">博客园</div>
<div id="content">
<div id="kindField">
<div id="kindHeader">分 类</div>
<ul id="kindList" data-bind="template:{name:'kindTmpl',foreach:kindList}"></ul>
</div>
<div id="essayField">
<div id="essayHeader">随笔</div>
<table id="essayList" cellpadding="0" cellspacing="0">
<thead>
<tr>
<td>标题</td><td class="w40 tc">发布<br />状态</td><td class="w40 tc">评论</td><td class="w40 tc">页面<br />浏览</td><td class="w40 tc">RSS<br />阅读</td><td class="w40 tc">操作</td><td class="w40 tc">操作</td>
</tr>
</thead>
<tbody data-bind="template:{name:'essayTmpl',foreach:essayList}"></tbody>
</table>
</div>
</div>
</div>

  分类模板和文章模板:

<script type="text/tmpl" id="kindTmpl">
<li><a data-bind="attr:{href:Url}"><span data-bind="text:Name"></span>(<span data-bind="text:Count"></span>)</a></li>
</script>
<script type="text/tmpl" id="essayTmpl">
<tr>
<td>
<a data-bind="attr:{href:Url,title:Name}">
<span data-bind="text:Name"></span>(<span data-bind="text:Date"></span>) <span data-bind="ifnot:Status">[草稿箱]</span>
</a>
</td>
<td class="tc" data-bind="text:$parent.getStatus($data.Status)"></td>
<td class="tc" data-bind="text:Comment"></td>
<td class="tc" data-bind="text:PageView"></td>
<td class="tc" data-bind="text:RssView"></td>
<td class="tc"><a class="action" data-bind="click:$parent.edit">编辑</a></td>
<td class="tc"><a class="action" data-bind="click:function(){$parent.del($element);}">删除</a></td>
</tr>
</script>

三、数据绑定

  前台定义model和viewmodel,然后通过ajax获取数据,完成绑定。

    function Kind(){
this.Url = "";
this.Name = "";
this.Count = "";
this.getKind = function(){
$.getJSON("../Handlers/GetKind.ashx",function(data){
kindVM.kindList(data);
})
}
}
function KindList(){
this.kindList = ko.observable([]);
}
function Essay(){
this.Url = "";
this.Name = "";
this.Status = 0;
this.Comment = 0;
this.PageView = 0;
this.RssView = 0;
this.Date = "";
this.getEssay = function(){
$.getJSON("../Handlers/GetEssay.ashx",function(data){
essayVM.essayList(data);
})
}
}
function EssayList(){
this.essayList = ko.observableArray([]);
this.edit = function(essay){
alert("编辑:" + essay.Url);
}
this.del = function(dom){
var jTr = $(dom).parents("tr");
jTr.replaceWith("<tr><td style='color:red;border:none;'>删除成功!</td></tr>");
}
this.getStatus = function(status){
if(status === 0){
return "未发布";
}
return "发布";
}
}
var kind = new Kind();
var kindVM = new KindList();
var essay = new Essay();
var essayVM = new EssayList();
ko.applyBindings(kindVM,document.getElementById("kindField"));
ko.applyBindings(essayVM,document.getElementById("essayField"));
kind.getKind();
essay.getEssay();

源码下载

knockout学习笔记10:demo的更多相关文章

  1. knockout学习笔记目录

    关于knockout学习系列的文章已经写完,这里主要是做个总结,并且将目录罗列出来,方便查看.欢迎各位大神拍砖和讨论. 总结 kncokout是一个轻量级的UI类库,通过MVVM模式使前端的UI简单话 ...

  2. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  3. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  4. 《C++ Primer Plus》学习笔记10

    <C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...

  5. SQL反模式学习笔记10 取整错误

    目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...

  6. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  7. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  8. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  9. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

随机推荐

  1. DropDownList实现可输入可选择

    1.js版本 <div style="z-index: 0; visibility: visible; clip: rect(0px 105px 80px 85px); positio ...

  2. mysql数据库乱码的问题解决

    排查原因:打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 1.前者解决方案: 在web.xml里面加上: <filter> <filter-name ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计

    目       录 第十一章     调试器设计... 2 11.1         调试接口... 2 11.2         界面方式调试... 3 11.3         命令行方式调试.. ...

  4. GJM : Unity3D HIAR -【 快速入门 】 三、导入 SDK

    导入 SDK 本文将向您介绍如何在 Unity 工程中导入 HiAR SDK for Unity.在开始之前,请先访问 HiAR 官网下载最新版本的 SDK. 下载 HiAR SDK for Unit ...

  5. jQuery技巧大放送

    1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...

  6. xmlHttp.readyState的五种状态

    自己简单的总结一下 深入的了解可以看其他道友的 O(∩_∩)O readyState有五种可能的值: 0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法. ...

  7. Linux 性能监测:工具

    一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系 ...

  8. O365(世纪互联)SharePoint 之使用Designer报错

    前言 在SharePoint Online中使用Designer报错,错误为:This Feature has been disabled by your administrator.找了好久发现原因 ...

  9. IOS 开发小技巧总结

    一.添加自定义字体 1.把字体文件拖到工程中. 2.plist 文件中添加字段:<Array>Fonts provided by application</Array> 把字体 ...

  10. angularJS 学习演示

    开源网址(带中文说明注释):https://github.com/EnhWeb/angularJS.git