从javascript函数更新Knockout viewmodel表单输入绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从javascript函数更新Knockout viewmodel表单输入绑定相关的知识,希望对你有一定的参考价值。

我正在使用html表单,其输入绑定到Knockout视图模型。其中两个表单输入是纬度/经度坐标的双重类型:

<div class="form-group">
    <input class="form-control" name="Observation.LocationLatitude" data-bind="value: Observation.LocationLatitude" id="latitude" />
    <input class="form-control" name="Observation.LocationLongitude" data-bind="value: Observation.LocationLongitude" id="longitude" />
</div>

我从我的Google Maps javascript函数更新这些:

document.getElementById('latitude').value = markers[0].position.lat();
document.getElementById('longitude').value = markers[0].position.lng();

代码更新输入字段,但不更新对viewmodel的绑定。

视图模型更新的唯一方法是直接输入到输入字段。在documentation之后,我尝试了“textInput”绑定,以及值输入绑定没有成功。我还尝试在Javascript中设置/更新输入字段的焦点。这也行不通。

有谁知道是否有可能从Javascript更新绑定?

答案

让淘汰赛为您做繁重的工作 - 您只需要担心更新您的模型,淘汰赛将更新视图。假设您的模型属性是可观察的:

Observation.LocationLatitude(markers[0].position.lat());
Observation.LocationLongitude(markers[0].position.lng());

通常,如果您使用knockout来管理DOM,您希望不要直接更新它(包括输入的值,正如您在这里尝试的那样),因为至少淘汰赛时不会意识到更新(如在这里),或者更糟,它会导致冲突和错误。

以上是关于从javascript函数更新Knockout viewmodel表单输入绑定的主要内容,如果未能解决你的问题,请参考以下文章

将 C# 字符串连接到 JavaScript/knockout 函数/observables

Knockout.js简介

Knockout js - 如何在两个 javascript 文件之间传递值

Knockout/Select2:触发 select2 根据可观察的选项更新进行更新

通过 knockout.js 将选中的复选框值传递给 javascript

D3.js 和 Knockout Force Diagram API 更新