ko knockoutjs动态属性绑定技巧应用


Posted in Javascript onNovember 14, 2012

knockoutjs 简称 ko
ko的动态属性是指,ViewModel不确定的属性,而后期却需要的属性。
什么是不确定属性,比如ListModel如果 编辑某一项,想把这一项的状态变更为Edit。数据并不包括Edit属性,mvvm绑定时,会发现报错。
那么一定需要拓展ko才能达到我们的目的。
首先来认识有值属性绑定,和 无值属性绑定:
一、有值属性绑定
JS模型:

$(function () { 
var viewModel = function () { 
var self = this; 
self.text = ko.observable(1); 
}; 
ko.applyBindings(new viewModel()); 
});

UI绑定:
<div data-bind='text:text'></div>

呈现:
ko knockoutjs动态属性绑定技巧应用 
二、无值属性绑定
JS模型:
$(function () { 
var viewModel = function () { 
var self = this; 
self.text = ko.observable(); 
}; 
ko.applyBindings(new viewModel()); 
});

当然text是一般值类型,用法 和 有值属性绑定一样,如果非值类型,而属性是一个对象,而需要使用with:
UI绑定:
<div data-bind='with:text'> 
<div data-bind="text:property"></div> 
</div>

三、动态属性绑定:
动态属性绑定,那么这个属性本身不确定,沿用ko的方法是很难去实现,所以 需要进行拓展。
JS拓展:
//雾里看花 Q:397386036 
ko.bindingHandlers.ext = { 
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
var value = ko.utils.unwrapObservable(valueAccessor()); 
for (var handler in value) { 
if (value.hasOwnProperty(handler)) { 
if (typeof viewModel[value[handler]] == 'undefined') { 
viewModel[value[handler]] = ko.observable(); 
} 
ko.bindingHandlers[handler].update(element, function () { return viewModel[value[handler]]; }); 
} 
} 
} 
};

JS模型:
$(function () { 
var viewModel = function () { 
}; 
ko.applyBindings(new viewModel()); 
});

UI绑定:
<div data-bind="ext:{text: 'text'}"></div> 
<!--事件 便于 测试--> 
<a href="javascript:void(0)" data-bind="click:function(){$data.text(1);}">更改text值</a>

ext中,第一个text是ko text方法,第二个text必须是字符串,是context/viewModel的属性。所以ext的动态属性,可以使用于任何ko方法,比如ext:{text:'text', value:'text'}
呈现:
ko knockoutjs动态属性绑定技巧应用
Javascript 相关文章推荐
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
Jquery颜色选择器ColorPicker实现代码
Nov 14 #Javascript
jquery offset函数应用实例
Nov 14 #Javascript
如何让div span等元素能响应键盘事件操作指南
Nov 13 #Javascript
给artDialog 5.02 增加ajax get功能详细介绍
Nov 13 #Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 #Javascript
Google的跟踪代码 动态加载js代码方法应用
Nov 12 #Javascript
Javascript开发之三数组对象实例介绍
Nov 12 #Javascript
You might like
简单的PHP多图上传小程序代码
2011/07/17 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
信息管理专业学生自荐信格式
2013/09/22 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
2014年质检员工作总结
2014/11/18 职场文书
2015年小学开学寄语
2015/02/27 职场文书
英文产品推荐信
2015/03/27 职场文书
道歉的话怎么说
2015/05/12 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书