knockout学习笔记10:demo
前面已经介绍了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的更多相关文章
- knockout学习笔记目录
关于knockout学习系列的文章已经写完,这里主要是做个总结,并且将目录罗列出来,方便查看.欢迎各位大神拍砖和讨论. 总结 kncokout是一个轻量级的UI类库,通过MVVM模式使前端的UI简单话 ...
- 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- 《C++ Primer Plus》学习笔记10
<C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息
golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Hadoop学习笔记(10) ——搭建源码学习环境
Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
随机推荐
- FFmpeg学习1:视频解码
在视频解码前,先了解以下几个基本的概念: 编解码器(CODEC):能够进行视频和音频压缩(CO)与解压缩(DEC),是视频编解码的核心部分. 容器/多媒体文件(Container/File):没有了解 ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- php在没有登录的情况下自动跳转到登录页
<?php namespace Home\Controller; use Think\Controller; class BaseController extends Controller{ / ...
- 1、Python基本概念
1.数 python中有4种类型的数--整数.长整数.浮点数和复数 2.字符串 单引号.双引号或者三引号包含的字符序列,如: 'char' #单引号 "char" #双引号 ''' ...
- shell笔记
shell:俗称操作系统的"外壳",就是命令解释程序. 是用户与Linux内核之间的接口. 是负责与用户交互,分析.执行用户输入的命令,并给出结果或出错提示. ...
- 移动端web自适应解决方案: adaptive.js
代码有更新,最好直接查看github github:https://github.com/finance-sh/adaptive adaptivejs利用rem解决移动端页面开发的自适应问题 页面模板 ...
- SQL server学习
慕课网sql server学习 数据库第一印象:desktop--web server--database server** 几大数据库:sql server.oracle database.DB2. ...
- SQL SERVER 数据库各版本功能对比
以前写了篇SQL SERVER 2008数据库各版本功能对比,官网提供的那个功能确实很好很强大,后面发现那个链接失效了.今天又遇到要对比SQL Server 2014数据库版本功能需求,搜索找了好久才 ...
- 数据备份的OSS接口
最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...
- Spring:ApplicationContext (2)
在使用Spring时,通常会配置一个applictioncontext.xml 来指定ApplicationContext的相关信息. 当使用SpringMVC时,还会再另外指定一个[server-n ...