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 相关文章推荐
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
vue el-table实现自定义表头
Dec 11 Javascript
JavaScript中this函数使用实例解析
Feb 21 Javascript
js实现详情页放大镜效果
Oct 28 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使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
Python 实现随机数详解及实例代码
2017/04/15 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
python线程的几种创建方式详解
2019/08/29 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
电子专业毕业生自我鉴定
2014/01/22 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
销售2014年度工作总结
2014/12/08 职场文书
舞出我人生观后感
2015/06/16 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
 python中的元类metaclass详情
2022/05/30 Python
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS