表单绑定器

“click”绑定

Click 绑定器可以将javascript函数绑定到指定的dom元素,并且再该元素被点击时将触发绑定的函数,大多数情况下都会使用button、input和a元素,当然其他可见的dom元素也是一样可以的。下面我们就简单的举一个例子:

 <div>
你已经点击了<span data-bind="text:numberOfClicks" ></span>
<button data-bind="click: incremmentClickCounter">点击</button>
</div> <script type="text/javascript"> var appViewModel = {
numberOfClicks: ko.observable(0),
incremmentClickCounter: function () {
var t = this.numberOfClicks();
this.numberOfClicks(t + 1);
}
} ko.applyBindings(appViewModel);
</script>

每次点击按钮,都可以发现对应的数值在不断的递增,当然还有就是在foreach绑定下,使用$parent.xxxxx指定click绑定的函数时,将会把当前这条数据作为第一个参数传递给指定的函数,比如下面我们可以通过这种方式来删除数据:

 <ul data-bind="foreach:places" >
<li>
<span data-bind="text:$data" ></span>
<button data-bind="click: $parent.removePlace">删除</button>
</li>
</ul> <script type="text/javascript"> var appViewModel = function(){
var self = this;
this.places = ko.observableArray(['London','Paris','Tokyo']);
this.removePlace = function (data) {
self.places.remove(data);
}
} ko.applyBindings(new appViewModel());
</script>

通过点击删除按钮,将可以删除对应的项。学过监控数组的还知道另一个方法,就是可以不删除数据,但是会为这条数据设置标记,同时在foreach中也不会显示,主要是方面我们与服务器端进行同步。

具备一定javascript基础的读者应该知道事件还会传递一个event参数,而这个参数包含了事件更多具体的参数,当然我们在ko下一样可以使用,比如我们将上面的代码改写。只有按下shift并点击才可以删除:

     var appViewModel = function(){
var self = this;
this.places = ko.observableArray(['London','Paris','Tokyo']);
this.removePlace = function (data, event) {
if (event.shiftKey)
self.places.remove(data);
}
}

现在我们只有通过按下shift并点击删除才可以删除这条数据了。

如果你需要更多的参数那么你可以写成如下所示的方式:

 <button data-bind="click: function(data, event) { myFunction('param1', 'param2', data, event) }">
点击
</button>

这样当点击这个按钮之后,将会指定myFunction并将param1、param2以及默认的参数传递给函数,这对于需要将一个事件按照不同的情况复用的时候很有用。

提示:ko将会阻止设置了click绑定器元素的默认行为,比如a标签,如果设置了click绑定器则不会导致跳转到href所指定的页面,如果不想阻止默认行为可以在函数中返回true即可。关于冒泡事件,ko也给我们提供了解决方案,默认情况下ko不会阻止,如果我们需要阻止冒泡可以按照如下的方式设置clickBubble:

 <div data-bind="click: myDivHandler">
<button data-bind="click: myButtonHandler, clickBubble: false">
点我
</button>
</div>

上面的例子,当我们点击了div内的button将不会导致div的发生点击事件。

“event”绑定

页面中不可能仅仅只存在点击事件,当然还存在其他很多事件,但是都不是很常用,所以ko就提供了一个event可以帮助我们给其他事件绑定函数,当然具体的赋值方式跟click一样,比如下面我们可以div的mouseover和mouseout绑定监听事件(事件可以自行写,没有限制):

     <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }">
碰我
</div>

当我们的鼠标移动到上面就会导致执行enableDetails函数,当离开之后则会执行disableDetails函数,当然还可以设置其他更多的事件(keypress,mouseover,mouseout)。

“submit”绑定

顾名思义,就是用来绑定表单的提交事件的,当然这个绑定器可不是绑定在按钮上的,而是直接绑定到一个表单中。比如下面的代码:

 <form action="~/Views/Home/Index" data-bind="submit: formSubmit">
<input type="text" name="a" />
<button type="submit">提交</button>
</form> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.formSubmit = function (formelement) {
var t = formelement;
}
} ko.applyBindings(new appViewModel());
</script>

formSubmit中的formelement将指向该表单元素,当然ko默认会阻止表单的提交,如果需要取消这个默认行为,可以在函数中返回true即可。

“enable”绑定

顾名思义,利用这个绑定器可以控制表单元素是否启用,如果下面的代码将可以控制输入框是否可用:

 <input type="text" data-bind="enable:isShow" />
<button type="button" data-bind="click:formSubmit" >开关</button> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.isShow = ko.observable(true);
this.formSubmit = function () {
self.isShow(!self.isShow());
}
} ko.applyBindings(new appViewModel());
</script>

输入框一开始是可以输入的,点击了按钮之后输入狂将会被禁用,基本上它的功能就这些了,另外一个就是 disable 绑定器,在满足条件时将禁用指定的标签。

“value”绑定

Value绑定器将会把你的视图模型中的属性与DOM元素中的value关联。可以使用于表单元素,如<input>、<select>和<textarea>。当用户修改了关联DOM元素中的值将会自动更新视图模型中关联的属性,相反如果你修改了视图模型中的属性,那么DOM元素中显示的值也会跟着变动。

比如下面的例子:

 <div>
<label for="username">username:</label>
<input id="username" type="text" data-bind="value: username" />
</div>
<div>
<label for="password">password:</label>
<input id="password" type="text" data-bind="value: password" />
</div>
<div>
<button type="button" data-bind="click: showInfo">showInfo</button>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.username = ko.observable("请输入");
this.password = ko.observable("");
this.showInfo = function () {
alert(self.username() + ":" + self.password());
};
} ko.applyBindings(new appViewModel());
</script>

如果你关联的视图模型中的属性是对象或者数组那么KO就会使用toString的值。所以建议使用字符串或者数值类型。当用户修改了文本框中的值,并转移了焦点KO才会更新视图模型(就是change事件),当然我们可以使用valueUpdate修改这一行为。

valueUpdate可以接受如下的值:

“input” :当<input>或<textarea>标签中的值改变将会更新视图模型中的值(支持IE9+)。

“keyup” :当用户释放了一个键将会更新视图模型中的值。

“keypress” :当用户完成一个字符输入时将更新视图模型中的值。

“afterkeydown” :当用户按下一个键的同时将会更新视图模型中的值。

比如下面的例子将可以实时的显示用户输入的值:

 <div>
<input type="text" data-bind="value: realvalue,valueUpdate:'input'" />
<label data-bind="text: realvalue"></label>
</div> <script type="text/javascript"> var appViewModel = function () {
var self = this;
this.realvalue = ko.observable("");
} ko.applyBindings(new appViewModel());
</script>

Knockout学习之表单绑定器(上)的更多相关文章

  1. Knockout学习之表单绑定器(下)

    “hasFocus”绑定 hasFocus绑定器会将DOM元素的焦点状态与视图模型中的属性相关联,当你设置视图模型中关联的属性为true或false后,将能够设置关键的DOM元素是否获得焦点. 比如下 ...

  2. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. Element Form表单实践(上)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  4. 表单绑定v-model

    表单控件在实际开发中是极为常见的.特别是对于用户信息的提交,需要大量的表单.Vue中使用v-model指令来实现表单元素和数据的双向绑定.此篇记录下其原理,以及当时学习时候的一些小尝试以及修饰符. v ...

  5. vue基础-动态样式&表单绑定&vue响应式原理

    动态样式 作用:使用声明式变量来控制class和style的值 语法: :class/:style 注意:尽可能不要把动态class和静态class一起使用,原因动态class起作用的时间会比较晚,需 ...

  6. KnockoutJS 3.X API 第四章 表单绑定(10) textInput、hasFocus、checked绑定

    textInput绑定目的 textInput绑定主要用于<input>或者<textarea>元素.他提供了DOM和viewmodel的双向更新.不同于value绑定,tex ...

  7. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  8. 基于element的表单渲染器 (el-form-renderer)

    基于 element-ui 封装的表单渲染器,完整继承了 element 的属性定义,并进行了简单扩展,从而用户能够通过使用一段预设的数据渲染出一个完整的 element 表单. 演示地址 项目地址 ...

  9. jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法

    jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jq ...

随机推荐

  1. C#零基础入门03:打老鼠初级

    一:在源码管理器中打开VS 注意,下文这样的打开方式是在 TFS 的源码服务器中打开解决方案.如果我们使用 SVN,则直接在硬盘上打开解决方案就可以了. 打开VS: 然后按上图中的步骤1和2(双击2处 ...

  2. emouse思·睿—评论与观点整理之一

    虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...

  3. DatabaseMirroring搭建

    1.    概述 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上.通常,这些服务器实例驻留在不同位置的计算机上.启动数据库上的数据库镜像 ...

  4. 【Scala】Scala-Option-Null的蹊跷

    Scala-Option-Null的蹊跷 scala Some(null)_百度搜索 scala - Why Some(null) isn't considered None? - Stack Ove ...

  5. iOS - 切换图片/clip subview/iCarousel

    源代码:点击打开链接 这个图片展示的时候,我只想让它在蓝色的view上展示..就需要去设置view的一个属性clip subview..把这个属性打勾...view有个clip subview属性,选 ...

  6. ML&DL视频教程资源

    作者:Bruce链接:https://www.zhihu.com/question/49909565/answer/345894856来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  7. THINKPHP 解决模块不存在时出现空页面的问题

    遇到的问题: 最近使用THINKCMF开发了一个企业网站,因为之前客户的域名变更过,然后就发现当某个模块不存在的时候就出现了空页面 在 THINKPHP论坛 上有人说在项目里添加一个EmptyActi ...

  8. how-to-get-a-job-in-deep-learning

    http://blog.deepgram.com/how-to-get-a-job-in-deep-learning/ How to Get a Job In Deep Learning 22 SEP ...

  9. "Ext 4.1 Grid 'el.dom' 为空或不是对象"问题的解决

    我在使用Ext 4.1 做Grid,IE下冒出这么个错误,导致表格完全显示不出来,换另外一个IE浏览器,有没有问题,呵呵,百思不得其解啊... 后来得出答案,即在grid相关代码周围套上Ext.onR ...

  10. [Canvas]Running Horse

    下载地址:https://files.cnblogs.com/files/xiandedanteng/52-RunningHorse.rar,下载完毕后请使用Chrome浏览器打开Index.html ...