由于空视图模型,将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需要一个参数。