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笔记 数据的存储与访问性能优化
Aug 02 Javascript
JavaScript将相对地址转换为绝对地址示例代码
Jul 19 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
js对象基础实例分析
Jan 13 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
React+Redux实现简单的待办事项列表ToDoList
Sep 29 Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 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获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
js判断节假日实例代码
2017/12/27 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python 读取数据库并绘图的实例
2019/12/03 Python
Python列表解析操作实例总结
2020/02/26 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
考试作弊被抓检讨书
2014/01/10 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
师德师风建设方案
2014/05/08 职场文书
综治工作心得体会
2014/09/11 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
公司备用金管理制度
2015/08/04 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android