knockout value binding:从html元素重新读取属性的方法

时间:2014-08-19 18:34:26

标签: knockout.js

在使用值绑定时,我需要一种从html元素获取KO reload属性的方法。

问题是我需要使用form.reset()方法。

使用该方法后,淘汰赛观察者没有更新,因为没有事件"重置"对于表单元素和事件"更改"不是由浏览器触发的。

由于FF和Chrome都没有触发"更改"在form.reset()之后(至少对于输入[type = file]),我想可能是这是一个功能,但我还是不明白这一点。

无论如何,我是否有任何方法可以说它需要从dom元素重新加载值?

我会在myform.reset()之后调用类似myViewModel.reload()或myObservable.reload()的内容,它会解决我的问题。

或者可能有人看到另一种方法来解决我的问题?任何想法都很好。

由于

1 个答案:

答案 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是重新创建表单视图模型而不是清除它。