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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 Javascript
vue中v-for加载本地静态图片方法
Mar 03 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
JavaScript编码小技巧分享
Sep 17 Javascript
移动端JS实现拖拽两种方法解析
Oct 12 Javascript
node中短信api实现验证码登录的示例代码
Jan 20 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通过strpos查找字符串出现位置的方法
2015/03/17 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
PHP7 新增功能
2021/03/09 PHP
[原创]图片分页查看
2006/08/28 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
对python中dict和json的区别详解
2018/12/18 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
python中的itertools的使用详解
2020/01/13 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
安全生产标语
2014/06/06 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
教师求职简历自我评价
2015/03/10 职场文书
裁员通知
2015/04/25 职场文书
道歉信怎么写
2015/05/12 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
python playwrigh框架入门安装使用
2022/07/23 Python