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 firefox不显示本地预览图片问题的解决方法
Nov 12 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
jQuery中Datatables增加跳转到指定页功能
Feb 08 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
利用npm 安装删除模块的方法
May 15 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
Jul 26 Javascript
微信小程序实现watch监听
Jun 04 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
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
php文件上传简单实现方法
2015/01/24 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
Python实现各种排序算法的代码示例总结
2015/12/11 Python
详解python中的Turtle函数库
2018/11/19 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python collections模块的使用方法
2020/10/09 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
小车司机岗位职责
2013/11/25 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
低碳环保倡议书
2014/04/14 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
Pytest中skip skipif跳过用例详解
2021/06/30 Python
【2·13】一图读懂中国无线电发展
2022/02/18 无线电