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全部源代码
May 04 Javascript
通过隐藏option实现select的联动效果
Nov 10 Javascript
JavaScript 图片预览效果 推荐
Dec 22 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
Dec 20 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
jquery单行文字向上滚动效果的实现代码
Sep 05 Javascript
JS实现一个列表中包含上移下移删除等功能
Sep 24 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 Javascript
Node.js API详解之 module模块用法实例分析
May 13 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 分页类 扩展代码
2009/06/11 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
JavaScript 特殊字符
2007/04/05 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python3中eval函数用法使用简介
2019/08/02 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
机关道德讲堂实施方案
2014/03/15 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang