cru*_*ush 3 javascript knockout.js
我将ViewModel的submitForm方法绑定到我的form元素,如下所示:
<form action="#" method="post" data-bind="submit: submitForm">
Run Code Online (Sandbox Code Playgroud)
我的ViewModel如下所示:
function ViewModel() {
this.submitForm = function (data, event) {
console.log(event); //undefined
};
}
ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)
当我提交表单,上面的处理程序被解雇,但是event是undefined.我的上述代码基于以下文档:
注意2:访问事件对象或传递更多参数
在某些情况下,您可能需要访问与您的click事件关联的DOM事件对象.Knockout会将事件作为第二个参数传递给您的函数,如下例所示:
<button data-bind="click: myFunction">
Click me
</button>
<script type="text/javascript">
var viewModel = {
myFunction: function(data, event) {
if (event.shiftKey) {
//do something different when user has shift key down
} else {
//do normal action
}
}
);
ko.applyBindings(viewModel);
</script>
Run Code Online (Sandbox Code Playgroud)
注意:上面的语法错误是从KnockoutJS示例中逐字复制的.我认为这是他们的错误,明显的纠正应该导致代码按照文档记录的方式工作.
这个代码示例,以及文档引用,尽我所知,模仿我上面写的内容.然而,正如在此的jsfiddle可以看出,event是undefined.
event在提交处理程序中获取对象的访问权限?对于那些想知道我为什么引用click绑定文档的人,我从submit绑定文档中指示了那里,其中说明了以下内容:
有关如何将其他参数传递到提交处理程序函数的信息,或者在调用视图模型上不存在的函数时如何控制此句柄,请参阅与单击绑定相关的注释.该页面上的所有注释也适用于提交处理程序.
在当前实现中,您无法获取绑定处理程序中的event对象submit.
但是,您可以使用event绑定并手动订阅submit事件:
<form method="post" action="#" data-bind="event: {'submit': submitForm}">
<input type="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
演示JSFiddle.