由于空视图模型,将knockout应用于填充表单而不擦除表单的数据?

我有一个脚本,通过将空视图模型应用于我的表单来初始化knockout。

当用户在表单中输入数据时,视图模型会相应更新 – 这是预期的行为。

JavaScript的

var viewModel = { myField : ko.observable(), init : function (somedata) { ... ko.applyBindings(this, container); }, ...more stuff... } 

局部

  x.MyField, new Dictionary { { "data-bind", "value: myField, valueUpdate: 'keyup'" } })%> 

当我调用我的javascript在现有表单中应用knockout时,我的敲除视图模型中的空数据将擦除MyField的值(然后在我的输入字段中)(该视图模型是我的javascript驻留在另一个文件中的一部分)。

加载页面时,MVC确保MyField输入元素填充了先前从MyField输入的数据。 当调用init ,该字段将被viewmodels myField的值覆盖,该值为空,因为它是一个静态JavaScript文件。

我该如何解决这个问题?

我尝试了两种方法来处理这样的事情:

1-如果您可以很好地控制服务器端(看起来像这样),那么您可以考虑在视图中输出javascript,将可观察值设置为正确的值。

有点类似于此: http : //blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/ 。 至少这部分:

  

您可以在调用applyBindings之前执行此操作并集成initialData,也可以只发出直接将您的observable设置为正确值的javascript。

2-如果您无法很好地控制服务器端(第三方控件或此时您无法/不愿意更改的内容),那么您可以考虑在页面加载后初始化viewModel,但是在调用applyBindings之前。 您可以找到您感兴趣的元素,从中读取元数据或值,并在让绑定执行其工作之前设置您的可观察对象。

也许你的一个复杂因素是,听起来你的所有javascript都在一个单独的文件中。

我不确定,但我认为ko.observable需要一个参数。