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 13 Javascript
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
深入理解JavaScript中的并行处理
Sep 22 Javascript
微信小程序 页面跳转传递值几种方法详解
Jan 12 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 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 mysql数据库操作分页类
2008/06/04 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
基于python实现查询ip地址来源
2020/06/02 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
上班早退检讨书
2014/01/09 职场文书
总经理助理工作职责
2014/02/06 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
教你用eclipse连接mysql数据库
2021/04/22 MySQL