knockout是一款前端实现MVVM的JS框架,仅knockout.js一个47kb的文件,相当实用,做前端无刷新页面,快速实现JS与HTML数据交互。

knockout目前最新版:knockout-3.1.0.js

关于knockout可以去官网学习,官网内容很丰富,讲的很详细,可在线学习

knockout官网:http://knockoutjs.com/

本文主要讲官网没有提到的更新列表中的数据,绑定列表时,其中某条数据发生了变化页面无法及时刷新,其实官方没有提供刷新功能,于是我们用了一点小技巧来实现数据更新后刷新,而不用重新绑定整个列表:

<body>
<div data-bind="foreach:datas">
<p>
<span data-bind="text:n"></span> :
<span data-bind="text:a"></span>
<button data-bind="click:$parent.click">换</button>
</p>
</div>
</body> <script>
function ViewModel() {
var self = this;
this.datas = ko.observableArray([
{ n: "ad", a: "yes" },
{ n: "zs", a: "no" },
{ n: "ls", a: "no" }
]);
self.click = function () {
//拷贝当前点击对象到tmp,更改tmp需要更新的值,将this替换为tmp
var tmp = this.clone();
tmp.a = tmp.a == "yes" ? "no" : "yes";
self.datas.replace(this, tmp);
}
};
ko.applyBindings(new ViewModel()); //克隆对象
Object.prototype.clone = function () {
var obj = {};
for (var p in this)
obj[p] = this[p];
return obj;
};
</script>

这样就可以实现刷新。

原理就是将要更新的对象拷贝副本,更新副本,再调用replace方法将要更新的对象替换为副本对象。replace方法是官方API提供的,一旦调用成功就会刷新页面。

knockout和示例下载

knockout更新列表中的某条数据,knockout.js绑定数组时更新其中一条数据的更多相关文章

  1. sql 更新列表中最老的一条数据

    今天组长给个任务说要给摄像头触发一个列表.让缓存5条数据,每次摄像头触发更新一条,丢掉最老的一条数据.原来的update是直接更新掉一条,没带缓存的.然后搞了个sql语句,是这样的: UPDATE C ...

  2. 常用JS效果 需要时更新。。。

    1.手风琴效果 JS: $(function() {     var aMenuOneLi = $(".menu-one > li");     var aMenuTwo = ...

  3. Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件

    做个项目使用jquery  easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...

  4. Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效

    解决方案: 使用checkedValue和checked 组合,如下代码. <div><input type="radio" name="flavorG ...

  5. js 小数计算时出现多余的数据

    根据资料显示:是由于十进制换算成二进制,处理后,再由二进制换算成十进制时,造成的误差. 得出:所以(0.1+0.2)!=0.3 而是=0.30000000000000004的结果 解决方法: 参考:h ...

  6. js遍历map匹配数据和js遍历数组匹配map数据

    var __LocalDataCities = { list: { "010": ["北京", "BEIJING"], "0100 ...

  7. vue单页应用中 返回列表记住上次滚动位置、keep-alive缓存之后更新列表数据 那点事

    实践场景需求 产品列表中,滚动到一定位置的时候,点击查看产品信息,后退之后,需要回到原先的滚动位置,这是常见的需求 所有页面均在router-view中,暂时使用了keep-alive来缓存所有页面, ...

  8. Loadrunner Vugen参数列表中数据分配方法及更新值的时间9种组合说明及验证

    作为刚开始学习Loadrunner的新人,Data Assignment Method以及Update Method在相互组合之后,LR如何进行取值让我很是头疼. 于是花了一个晚上的时间认真学习官方文 ...

  9. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

随机推荐

  1. Django之博客系统:用户注册和Profile

    前面章节介绍了用户的登录,退出.这一章将介绍用户的注册.首先需要创建一个表单来让用户填写用户名,密码等信息.创建UserRegistrationFrom表单.并指定model为User类 from d ...

  2. UVa_Live 3664(精度坑)

    题意很好理解的贪心题,然而却卡疯了的精度坑. 再次理解一下double小数运算时可能导致的精度问题,本题为避免该问题可以将小数乘以100化为整数进行比较,输出的时候再除以100就ok: 思路也很好想, ...

  3. forEach时候删除数组某一属性项,使用splice容易出现问题

    第一次forEach循环,index是0,item是1 ,arr是[1,1,2], if条件成立,使用splice最终的arr是[1,2] 第二次循环,index是1,item是2,arr是[1,2] ...

  4. dorado中的视图实现类和监听器

    视图模型实现类(DefaultViewModel.java)的主要功能:  1. Dataset的初始化以及数据导入  2. 各种View组件的初始化工作 DefaultViewModel也是动态创建 ...

  5. 牛客寒假算法基础集训营4 B applese 走方格

    链接:https://ac.nowcoder.com/acm/contest/330/B 构造题,但是有两个特判... 1  2 2  1 然后就水了,血亏 #include<stdio.h&g ...

  6. Qt 学习之路 2(13):对话框简介

    Qt 学习之路 2(13):对话框简介  豆子  2012年9月14日  Qt 学习之路 2  53条评论 对话框是 GUI 程序中不可或缺的组成部分.很多不能或者不适合放入主窗口的功能组件都必须放在 ...

  7. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_dynamic基元类型

    1.代码使用 dynamic 表达式/变量来调用一个成员时,编译器会生成特殊的 IL 代码来描述所需的操作.这种特殊的代码称为 payload(有效载荷).在运行时,payload 代码根据当前由 d ...

  8. [CF1051F]The Shortest Statement (LCA+最短路)(给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路)

    题目:给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路 n≤100000,m≤100000,m-n≤20. 首先看到m-n≤20这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们 ...

  9. c#工具类之Int扩展类

    public static class IntHelper { /// <summary> /// 转换为2进制字符串 /// </summary> /// <param ...

  10. 封装OkHttp,通过改造Callback接口实现

    1:实现Callback回调接口import android.os.Handler;import android.os.Looper;import android.os.Message; import ...