前面已经介绍了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. .NET 实现并行的几种方式(三)

    本随笔续接:.NET 实现并行的几种方式(二) 在前两篇随笔中,先后介绍了 Thread .ThreadPool .IAsyncResult (即 APM系列) .Task .TPL (Task Pa ...

  2. MVC 传值

    1.ViewBag    Controller:ViewBag.Message = "Hello, Word";    View:@ViewBag.Message   注:View ...

  3. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  4. Spring学习系列(一) Spring简介

    Spring简介 之前一直想写点东西,可一直没有开始实施,各种原因都有,最大原因可能还是自己太懒了,嘿嘿.最近在看Spring in action这本书,为了能让自己坚持下去把书看完,这次决定同步的在 ...

  5. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

  6. Scala 包

    包的绝对地址_root_.开始 如_root_.scala.collection.mutable.ArrayBuffer

  7. 记录下UIButton的图文妙用和子控件的优先显示

    UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1 ...

  8. Swift-常量变量

    OC 用NSLog输出日志 swift 用print输出日志 swift语句结束不需要加:号 常量和变量: OC 定义常量 const int a = 10; swift 定义常量 let a = 1 ...

  9. 由用友NC刷新功能得到启示

    在做NC刷新界面数据的功能,就是 点刷新按钮然后刷新当前 list 中的数据,犯了一个错误. 我之前的做法是记录每次查询数据的sql条件语句,然后在点刷新的时候去调用这个条件语句,哈哈,错误就在这个逻 ...

  10. php-cgi not found

    错误描述 用PHPStorm运行PHP脚本的时候浏览器提示"502 Bad Gateway",PHPStorm提示"php-cgi not found". 系统 ...