knockoutjs总结
文章目录
- knockoutjs总结
- 特殊变量
- $root
- $parent
- with绑定
- 虚拟元素
- 事件绑定及参数传递
- 问题总结
- 在layer中使用knock的奇怪问题
- Knockout checkbox click 冲突
knockoutjs总结
之前写的两篇博客
knockoutJs在项目中的使用
knockout.js做table列表
参考
KnockOut : Introduction
特殊变量
$root
$root指的是ko所绑定的DOM,可以解决类似于作用域的问题,一般来说with、foreach等,在对应的dom标签区间中的属性是对应于with绑定的对象以及foreach循环中每一个对象中的变量,如果想在该标签区间内使用ViewModel中的其它属性,则会报错说找不到或者未定义之类的,那么就需要使用$root来指定作用域为ViewModel.
如下代码
<div class="input_list clearfix" data-bind="with:cpafInfoCondition"><div class="input_box clearfix"><div class="tabs-input clearfix fl"><p class="fl">行政区划</p><ul class="select fl"><li class="selected">-请选择-</li><li class="option"><ul data-bind="html:$root.divisionUl"></ul></li></ul></div>.....
self.cpafInfoCondition = ko.observable({currentPage:0,pageSize : 20,divisionProvince : '',cpafCno : '',cpafName : '',cpafStatus : '',cpaNumBegin : '',cpaNumEnd : '',orgForm : ''});...//区划self.divisionUl = (function () {
$parent
$parent 是指当前DOM元素直接的外部父类(只有一层);
with绑定
参考:knockoutjs六 with 绑定
在我看来,with是一个作用域或者上下文的限制。假设对象obj={key:val},那么在with:obj下可以直接使用key,而不需要使用obj.key
with还有个作用,当with的条件是null或者是undefined,那么下面的子元素就不会加载,如果不空就加载,这样就避免了一些错误,不会当obj是null或者是undefined的时候还调用obj.key发生报错。
虚拟元素
参考:Creating custom bindings that support virtual elements
如下
<!-- ko if:cpafNameNoData -->
<tr class="no-data"><td colspan="4">暂无符合条件的数据</td>
</tr>
<!-- /ko -->
<!-- ko foreach : cpafNameList -->
<tr class="midlist-top"><td class="zczsbh" data-bind="text:divisionProvince"></td><td class="zsxm" data-bind="text:cpafNo"></td><td class="zszt" data-bind="text:cpafName"></td><td class="swsmc" data-bind="text:cpafAbbr"></td>
</tr>
<!-- /ko -->
使用<!-- ko --><!-- /ko -->
做一个虚拟节点,注意写法,**在–和尖括号之间是没有空格的,**个人觉得有点像vue中使用Template元素渲染的意思
事件绑定及参数传递
以click为例
- 简单绑定
data-bind="click:funcName"
- 如果有多个事件需要一起绑定
data-bind="event:{click:clickFuncName,change:changeFuncName}"
- 如果需要传递参数
默认的,knockout会传递两个参数出来。
第一个参数是自己定义的ViewModel,第二个则是触发的event- 第一种方式
//这里的$data不可以省略
//这种方式,默认参数在最后.
data-bind="click:clickFuncName($data,'param1','param2')"
- 第二种方式
<button data-bind="click: function(data, event) { myFunction('param1', 'param2', data, event) }">Click me
</button>
问题总结
在layer中使用knock的奇怪问题
需求:当没有数据的时候显示"没有查询到符合条件的数据",否则显示数据
问题描述:当数据从无到有或者从有到无时,tbody再也无法显示任何内容了
问题代码如下
//layer弹出表格
layer.open({title: '处罚信息',type: 1,content: $(cpafPunish),area: ['1080px', '460px'],success: function () {cpafPunishViewModel = new CpafPunishViewModel();ko.cleanNode(cpafPunish);ko.applyBindings(cpafPunishViewModel, cpafPunish);cpafPunishViewModel.init(data.CPAF_NO);},end: function () {$(cpafPunish).hide();}});......
//表格的viewmodel
function CpafPunishViewModel() {var self = this;self.cpafPunishNoData = ko.observable(true);self.cpafPunishList = ko.observableArray([]);//查询列表self.init = function (cpafNo) {self.cpafPunishList([]);$.postAjax(contentPath + "/searchBfLogin/searchCpafPunish", {cpafNo: cpafNo}, function (list) {self.cpafPunishNoData(list.length < 1);self.cpafPunishList(list);}, true);}}
下表是表格
<div id="cpafPunish" style="display: none;height:50px;margin:0 auto;" class="layer_notice"><div class="table-wrap"><table class="conList"><thead><th width="80">行政区划</th><th width="150">事务所名称</th><th width="120">执业证书编号</th><th width="120">处罚类型</th><th width="120">做出处罚时间</th></thead><tbody class="midlist-body"><!-- ko if: cpafPunishNoData --><tr class="no-data"><td colspan="5">暂无符合条件的数据</td></tr><!-- /ko --><!-- ko foreach: cpafPunishList --><tr class="midlist-top"><td data-bind="text:DIVISION_NAME"></td><td data-bind="text:CPAF_NAME"></td><td data-bind="text:CPAF_CNO"></td><td data-bind="text:PUNISH_TYPE"></td><td data-bind="text:FILE_DATE"></td></tr><!-- /ko --></tbody></table></div>
</div>
解决问题的代码如下,即只new和绑定都只一次
self.viewPunish = function (data) {var cpafPunish = document.getElementById('cpafPunish');layer.open({title: '处罚信息',type: 1,content: $(cpafPunish),area: ['1080px', '460px'],success: function () {if (cpafPunishViewModel === undefined) {cpafPunishViewModel = new CpafPunishViewModel();ko.cleanNode(cpafPunish);ko.applyBindings(cpafPunishViewModel, cpafPunish);}cpafPunishViewModel.init(data.CPAF_NO);},end: function () {$(cpafPunish).hide();}});};
暂时还找不到合理的解释。
Knockout checkbox click 冲突
给checkbox绑定click,发现checkbox无法选中。网上查阅资料发现knockout在处理checkbox的checked和click时,需要一点小技巧
使用knockout同时绑定checked和click时,checkbox点击不勾选,在绑定的click事件中一定要返回true;
self.checkAll = function () {var target = event.srcElement || event.target;$('.sfq-all-check').prop('checked', $(target).prop('checked'));return true;};
knockoutjs总结相关推荐
- [转]Knockoutjs快速入门
本文转自:http://www.cnblogs.com/yinzixin/archive/2012/12/21/2827356.html Knockoutjs是一个JavaScript实现的MVVM框 ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...
- MVVM架构~knockoutjs系列之验证成功提示显示
对于knockout.validation来说,我们已经知道了如何去验证大部分表单元素,而有时,我们的需求希望在每个元素验证成功后,去显示正确的提示,这个我们很容易的使用self.元素.isValid ...
- MVVM架构~knockoutjs实现简单的购物车
返回目录 概念相关 购物车相信大家都用过,很方便,可以将多个商品添加到购物车,并且可以修改购买商品的数据,当然为了用户体验好,在修改数据时,你的价格也会出现变化的,这使用JS可以实现,但我认为,代码量 ...
- knockoutjs ajax分页,KnockoutJS 3.X API 第四章之数据控制流foreach绑定
foreach绑定 foreach绑定主要用于循环展示监控数组属性中的每一个元素,一般用于table标签中 假设你有一个监控属性数组,每当您添加,删除或重新排序数组项时,绑定将有效地更新UI的DOM- ...
- Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单
2019独角兽企业重金招聘Python工程师标准>>> 本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes ...
- 重拾Javascript (四) KnockoutJs使用
利用KnockoutJs来进行数据绑定及隔行不同样式或不同绑定数据操作 效果:[点击加载更多按钮 加载更多数据可从服务器来进行获取] 代码:[KO通过data-bind进行数据绑定 有TEXT,HTM ...
- java用mvvm,[Java教程]MVVM架构~使用boxy和knockoutjs实现编辑功能
[Java教程]MVVM架构~使用boxy和knockoutjs实现编辑功能 0 2014-04-24 14:00:08 返回目录 这个功能我认为非常有用,尤其在后台管理系统中,它对用户来说,使用体验 ...
- KnockoutJS 3.X API 第一章 简介
本文纯正翻译自官网API文档.其中包含一下个人理解. 官网API地址:http://knockoutjs.com/documentation/introduction.html 简介 Knockout ...
- Knockoutjs 实践入门 (2) 绑定事件
Knockoutjs 绑定事件 Knockoutjs 不仅支持UI 元素的属性绑定到model的属性,还支持UI 元素的事件绑定model的事件. 需求: l click me button 每单击 ...
最新文章
- cxgrid 保存数据_什么是大数据
- 提取图片纹理_Fundamentals Of Computer Graphics 第十一章 纹理映射(中)
- 听小鹏讲废话之OSI
- 三相pmsm矢量控制仿真模型_实时控制系统的时序模型及其在AUTOSAR系统仿真监控中的应用-Foundations4.1控制理论...
- 直接插入排序的python实现
- Collectors.toSet()
- Coaching 企业教练
- 【Android】3.21 示例21—兴趣点收藏功能
- 成功解决gyp verb ensuring that file exists: C:\Python27\python.exe gyp ERR! configure error gyp ERR! sta
- Editor: 维护一个整数编辑器 HDOJ4699
- 爬虫实战 爬取谷歌图片 Google images
- html提取excel指定单元格数据,怎样从很多的表格中提取指定单元格数据
- 地平线 J2J3了解笔记
- MySQL数据库有网络和无网络的部署
- 电子邮件里的CC和BCC的全称是什么?
- H5棋牌游戏app下载链接在微信中显示已停止访问或打不开的解决方案
- 如何利用淘宝快速推广新品牌
- Paddle入门实战系列(四):中文场景文字识别
- 【厂妹进谷歌】从富士康流水线小妹到 Google 工程师,She made it !!!
- jq遍历table的行 取input值