KnockoutJS更新数组某一项数据

KnockoutJS是一个JavaScript实现的MVVM框架。非常棒。比如列表数据项增减后,不需要重新刷新整个控件片段或自己写JS增删节点,只要预先定义模板和符合其语法定义的属性即可。简单的说,我们只需要关注数据的存取。

本文主要实现官网没有提到的更新数组绑定中的某一项数据时的操作,首先克隆该对象并更改后进行替换,从而达到更新的目的。这样可以避免重新绑定数组并更新整个列表。

<!DOCTYPE html>
<html>
<head>
	<title>ko update array list</title>
	<script type="text/javascript" src="knockout-3.4.0.js"></script>
</head>
<body>
	<h4>People</h4> 
	<ul data-bind="foreach: people"> 
	     <li> 
	         Name at position <span data-bind="text: $index"> </span>: 
	         <span data-bind="text: name"> </span> 
	         age:<span data-bind="text: age"></span>
	         <a href="#" data-bind="click: $parent.removePerson">Remove</a> 
	         <a href="#" data-bind="click: $parent.changePerson">Change</a> 
	     </li> 
	</ul> 
	<button data-bind="click: addPerson">Add</button>
	   
	<script type="text/javascript">
	    function AppViewModel() {
	        var self = this;
	 
	         self.people = ko.observableArray([
		         { name: 'Bert', age:19 },
		         { name: 'Charles', age:10 },
		         { name: 'Denise' , age:11 }
		     	]);
		 
	         self.addPerson = function () {
	             self.people.push({ name: "New at " + new Date() , age : 18 });
	         };
	 
	         self.removePerson = function () {
	             self.people.remove(this);
	         };

	         self.changePerson = function(){
	         	var tmp = self.clone(this);
	         	console.log(tmp);
	         	tmp.name = "kinderwang";
	         	self.people.replace(this,tmp);
	         };
	         //用做ko更新数组某一项数据时的克隆,无需重新清空并绑定整个列表
			 self.clone = function (source) {
			    var obj = {};
			    for (var p in source)
			      obj[p] = source[p];
			    return obj;
			 };
	     }
	 
	     ko.applyBindings(new AppViewModel());
	     
	 </script>
</body>
</html>
效果如下图:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值