有没有办法在<input>
值更改时更新observable,但是以编程方式,即通过Javascript更新?
以下是此用例的一个小问题,我无法使其正常工作:http://jsfiddle.net/qYXdJ/
如您所见,点击“通过Javascript更新输入值”链接时,observable显然未更新,因为它未反映在<span>
答案 0 :(得分:9)
如果你绝对不能直接修改observable(这是最好的方法),你可以触发“onchange”事件(Knockout在内部使用)。使用jQuery,这很简单:
$('#update').on('click', function() {
$('#input2').val('New Value').trigger('change');
});
如果您因任何原因不想使用jQuery,请查看this question。
答案 1 :(得分:4)
正如cyanfish所指出的那样,正确的方法是更新观察者。
如果问题是您的代码无法访问可观察对象,例如您正在编写书签以自动填写表单,那么您可以访问此类可观察对象:
function setValue(input, value) {
var bindingsString = input.getAttribute('data-bind');
if (bindingsString) {
var bindings = ko.bindingProvider.instance.parseBindingsString(bindingsString, ko.contextFor(input), input);
if (bindings.value) {
bindings.value(value);
} else if (bindings.checked) {
bindings.checked(value);
} else {
input.value = value;
}
} else {
input.value = value;
}
}
答案 2 :(得分:3)
您必须更改viewModel'name'属性而不是输入字段值,因为它是可观察的,并且该属性的任何更改都将反映到所有绑定的html元素。
var viewModel = {
name: ko.observable()
};
ko.applyBindings(viewModel);
document.getElementById('update').onclick = function(){
viewModel.name('New Value');
//document.getElementById('input2').value = 'New Value';
}