Knockout结合Bootstrap创建动态UI--产品列表管理
本篇文章结合Bootstrap创建一个比较完整的应用,对产品列表进行管理,包括产品的增加、删除、修改。
需要的引用
<script type='text/javascript' src='http://www.see-source.com/js/knockout-2.2.0.js'></script>
<script type='text/javascript' src='http://www.see-source.com/js/jquery-1.6.2.min.js'></script>
<link href="http://www.see-source.com/bootstrap/css/bootstrap.css" rel="stylesheet">
Html代码
<body>
<!-- 动态生成产品列表 -->
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>产品名称</th>
<th>原价</th>
<th>促销价</th>
<th>操作</th>
</tr>
</thead>
<tbody data-bind="foreach: products">
<tr >
<td>
<span data-bind="text: $data.Id"></span>
</td>
<td>
<input type="text" data-bind="value: $data.Name"/>
</td>
<td>
<input type="text" data-bind="value: $data.Price"/>
</td>
<td>
<input type="text" data-bind="value: $data.ActualCost"/>
</td>
<td>
<input type="button" class="btn" value="修改" data-bind="click: $root.update"/>
<input type="button" class="btn" value="删除" data-bind="click: $root.remove"/>
</td>
</tr>
</tbody>
</table>
<!-- 产品添加form -->
<form class="form-horizontal" data-bind="submit:$root.create">
<fieldset>
<legend>添加产品</legend>
<div class="control-group">
<label class="control-label" for="input01">产品名称</label>
<div class="controls">
<input type="text" name="Name" class="input-xlarge">
</div>
</div>
<div class="control-group">
<label class="control-label" for="input01">原价</label>
<div class="controls">
<input type="text" name="Price" class="input-xlarge">
</div>
</div>
<div class="control-group">
<label class="control-label" for="input01">促销价</label>
<div class="controls">
<input type="text" name="ActualCost" class="input-xlarge">
</div>
</div> <div class="form-actions">
<button type="submit" class="btn btn-primary">保存</button>
<button class="btn">取消</button>
</div>
</fieldset>
</form>
</body>
js代码
<script type="text/javascript">
function ProductsViewModel() {
var baseUri = 'http://localhost:8080/knockout/';
var self = this;
//self.products = ko.observableArray([{'Id':'111','Name':'联想K900','Price':'3299','ActualCost':'3000'},{'Id':'222','Name':'HTC one','Price':'4850','ActualCost':'4500'}]);
self.products = ko.observableArray(); $.getJSON(baseUri + "list", self.products);//加载产品列表 //添加产品
self.create = function (formElement) {
$.post(baseUri + "add", $(formElement).serialize(), function(data) {
if(data.success){//服务器端添加成功时,同步更新UI
var newProduct = {};
newProduct.Id = data.ID;
newProduct.Name = formElement.Name.value;
newProduct.Price = formElement.Price.value;
newProduct.ActualCost = formElement.ActualCost.value;
self.products.push(newProduct);
}
},"json");
}
//修改产品
self.update = function (product) {
$.post(baseUri + "update", product, function(data) {
if(data.success){
alert("修改成功");
}
},"json");
} //删除产品
self.remove = function (product) {
$.post(baseUri + "delete", "productID="+product.Id, function(data) {
if(data.success){
//服务器端删除成功时,UI中也删除
self.products.remove(product);
}
},"json"); }
}
ko.applyBindings(new ProductsViewModel()); </script>
本文转自:http://doliangzhe3.iteye.com/blog/1874910
Knockout结合Bootstrap创建动态UI--产品列表管理的更多相关文章
- 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容 ...
- 利用Fragment创建动态UI 之 Fragment之间的通信
为了可以复用一个fragment,所以在定义fragment的时候,要把它定义为一个完全独立和模块化,它有它自己的layout和行为.当你定义好了这些可复用的fragment,可以把他们和activi ...
- 【Android Developers Training】 19. 序言:通过Fragments构建动态UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android - 用Fragments实现动态UI - 创建灵活的UI
当设计程序来支持各种不一样的屏幕尺寸时,可以在不同的布局中重用fragment来根据可用的屏幕大小来优化用户体验. 例如,在手机上可能使用一个fragment来使用单窗口用户体验比较合适.但是,你可能 ...
- Android - 用Fragments实现动态UI - 创建Fragment
你可以把fragment当作activity中的一个活动模块,它有自己的生命周期,自己接收输入消息,可以在activity运行的时候添加和删除(就像可以在其他activity中重用的"子ac ...
- 9) 十分钟学会android--使用Fragment建立动态UI
为了在 Android 上为用户提供动态的.多窗口的交互体验,需要将 UI 组件和 Activity 操作封装成模块进行使用,这样我们就可以在 Activity 中对这些模块进行切入切出操作.可以用 ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- Asp.net MVC 3实例学习之ExtShop(四)——完成产品列表页
在完成产品列表页前要做一些准备功夫.首先是去下载MvcPager用了为产品列表分页.下载的可能是基于MVC 2的,没关系,可以用在MVC 3上.如果有担心,下载源代码重新编译一次好了.下载后将DLL添 ...
- Ribbon2: 创建动态的Ribbon库
Sam Radakovitz曾在Excel团队博客中发表过一篇文章,介绍了如何创建动态的Ribbon库,即如何通过RibbonX和VBA放置动态的图形图像到功能区库中,在该文中,作者创建了两个库:一个 ...
随机推荐
- thread msg
提取的nordic rf51xx/rf52xx sdk中的线程间消息通信机制,非常简洁 demo.c #include <stdio.h> #include <stdlib.h> ...
- python学习笔记(十六)内置函数zip、map、filter的使用
1.zip,就是把两个或者多个list,合并到一起,如果想同时循环2个list的时候,就使用zip.示例如下: l1 = ['a','b','c','e','f','g'] l2 = [,,] l3= ...
- 基于Flume+Kafka+ Elasticsearch+Storm的海量日志实时分析平台(转)
0背景介绍 随着机器个数的增加.各种服务.各种组件的扩容.开发人员的递增,日志的运维问题是日渐尖锐.通常,日志都是存储在服务运行的本地机器上,使用脚本来管理,一般非压缩日志保留最近三天,压缩保留最近1 ...
- HDU1003:Max Sum(简单dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题意一目了然就不说了,算法是从左往右扫,一个暂时保存结果的值,如果区间结果<0,那么就更改左右 ...
- Java中的哈夫曼树
package com.ietree.basic.datastructure.tree; import java.util.ArrayDeque; import java.util.ArrayList ...
- JVM类加载器工作流程
类加载器 classloader:谈到类加载,不得不提的就是负责此项工作的类加载器classloader,classloader的职责是将Java源文件编译后的字节码文件加载到内存中去执行. 类加载至 ...
- Delphi APP 開發入門(一)重生的 Delphi
Delphi APP 開發入門(一)重生的 Delphi 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀 ...
- cdoj1587 失恋772002天
地址:http://acm.uestc.edu.cn/#/problem/show/1587 题目: 失恋772002天 Time Limit: 3000/1000MS (Java/Others) ...
- HDU - 5406 CRB and Apple (费用流)
题意:对于给定的物品,求两个在高度上单调不递增,权值上单调不递减的序列,使二者长度之和最大. 分析:可以用费用流求解,因为要求长度和最大,视作从源点出发的流量为2的费用流,建负权边,每个物品只能取一次 ...
- selenium+python学习总结
学习了一个月的selenium+python,终于学有所成,下面以一个简单的项目来总结学习所得. 1. 项目结构 在项目结构中,大家要注意到:每一个源文件夹中都要有一个__init__ ...