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 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
jQuery解决iframe高度自适应代码
Dec 20 Javascript
js与jquery回车提交的方法
Feb 03 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 Javascript
JavaScript设置名字输入不合法的实现方法
May 23 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
Sep 09 Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 Javascript
javascript中layim之查找好友查找群组
Feb 06 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php数组添加元素方法小结
2014/12/20 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
学生党支部先进事迹
2014/02/04 职场文书
室内拓展活动方案
2014/02/13 职场文书
英语教师求职信
2014/06/16 职场文书
领导欢迎词致辞
2015/01/23 职场文书
通讯稿格式及范文
2015/07/22 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python