"submit" 绑定
"submit
绑定"在form表单上添加指定的事件以便该form被提交的时候执行定义的JavaScript 函数。只能用在表单 form
元素上。
当你使用 submit
绑定的时候, Knockout会阻止form表单默认的submit动作。换句话说,浏览器会执行你定义的绑定函数而不会提交这个form表单到服务器上。可以很好地解释这个,使用 submit
绑定就是为了处理view model的自定义函数的,而不是再使用普通的HTML form表单。 如果你要继续执行默认的HTML form表单操作,你可以在你的 submit
句柄里返回 true
。
基本用法
<form data-bind="submit: doSomething" action="save.jsp"> ... 点击提交表单那内容 ... <button type="submit">提交</button> </form>
Js代码
var viewModel = { doSomething : function(formElement) { //..do something return true;//省略此句表单不会进行提交,一般适用于ajax处理。 } }; ko.applyBindings(viewModel);当点击提交按钮时,表单不进行提交到save.jsp操作,只简单调用doSomething函数,除非在函数内显示返回true(return true)。另外,如果绑定函数带有参数,KO将把整个form表单元素作为参数传递到你的submit绑定函数里,如上面的参数formElement。
为什么不在submit按钮上使用click绑定?
在form上,你可以使用 click
绑定代替 submit
绑定。不过 submit
可以处理其它的函数行为,比如在输入框里输入回车的时候可以提交表单。
Html代码
<form data-bind="submit: doSomething" action="save.jsp"> ... 点击提交表单那内容 ... <input /> <button type="submit">提交</button> </form>Js代码
var viewModel = { doSomething : function(formElement) { //..do something alert("点击回车触发了submit"); } }; ko.applyBindings(viewModel);在输入框内输入内容,然后按回车,也可触发submit
"enable" 绑定
我们的UI元素在很多时候可能不希望用户可以编辑,或者在达到某些条件的时候,开启/关闭DOM元素的编辑功能,这个时候,就该使用enable绑定
- 可以绑定一个bool值,或者一个可以转化为bool值的js express(表达式)。
- 如果绑定的是一个observable变量,则ko会负责跟踪变量值的变化,动态修改DOM元素的disable属性。
"enable
绑定"使DOM元素只有在参数值为 true
的时候才启用。在form表单元素 input
, select
, 和textarea
上非常有用。
基本用法
Html代码
<p> <input type='checkbox' data-bind="checked: hasCellphone" /> I have a cellphone </p> <p> Your cellphone number:<input type='text' data-bind="value: cellphoneNumber, enable: hasCellphone" /> </p>Js代码
var viewModel = { hasCellphone : ko.observable(false), cellphoneNumber: "" }; ko.applyBindings(viewModel);
这个例子里,“Your cellphone number”后的文本框初始情况下是禁用的,只有当用户点击上面的checkbox时候才可用。
使用任意JavaScript表达式
不紧紧限制于变量 – 你可以使用任何JavaScript表达式来控制元素是否可用。例如,
Html代码
<button data-bind="enable: cellphoneNumber() == '555'"> Do something </button>Js代码
var viewModel = { cellphoneNumber: ko.observable("555") }; ko.applyBindings(viewModel);当属性cellphoneNumber的值等于'555',按钮button启用,不等于时禁用。