在使用值绑定时,我需要一种从html元素获取KO reload属性的方法。
问题是我需要使用form.reset()方法。
使用该方法后,淘汰赛观察者没有更新,因为没有事件"重置"对于表单元素和事件"更改"不是由浏览器触发的。
由于FF和Chrome都没有触发"更改"在form.reset()之后(至少对于输入[type = file]),我想可能是这是一个功能,但我还是不明白这一点。
无论如何,我是否有任何方法可以说它需要从dom元素重新加载值?
我会在myform.reset()之后调用类似myViewModel.reload()或myObservable.reload()的内容,它会解决我的问题。
或者可能有人看到另一种方法来解决我的问题?任何想法都很好。
由于
答案 0 :(得分:2)
通常,表单重置不会生成Knockout可用于更新值的更改事件,请参阅此bug。虽然,您可以在表单重置事件上实现字段的手动重置,如下所示:
视图模型:
function ViewModel() {
var self= this;
self.fileInput = ko.observable();
self.textInput = ko.observable();
self.showFileInputValues = function() {
alert("File input: " + self.fileInput()+"\n Text input: " + self.textInput());
}
self.reset = function() {
self.fileInput(undefined).textInput(undefined);
}
}
标记:
<form data-bind="event: { reset: reset }">
<input type="file" data-bind="value: fileInput" />
<input type="text" data-bind="value: textInput" />
<input type="reset" value="Reset form" />
</form>
<button data-bind="click: showFileInputValues" >Show value</button>
请参阅demo。
另一个approach是重新创建表单视图模型而不是清除它。