使用jQuery val()更新KnockoutJS绑定文本框

时间:2013-05-09 18:28:46

标签: jquery knockout.js knockout-mapping-plugin

所以我在单页面应用程序中使用KnockoutJS和KO Mapping Plugin,一切都很好......除了......

引用网站有一个选项可以在查询字符串中发送一些值来预先填充几个文本框。我有一个JS函数,它解析查询字符串并使用jQuery val()来填充KO绑定的文本框值。但是,该值永远不会被设置。

这是我正在尝试的一些伪代码......

var jobTitle = "Ninja";

$("#jobTitle").val(jobTitle); // doesn't work

$("#jobTitle").val(jobTitle).change(); // doesn't work

$("#hiddenJobTitle").val(jobTitle); // works

标记

<input id="jobTitle" type="text" data-bind="value: JobTitle" />

<input id="hiddenJobTitle" type="hidden" data-bind="value: JobTitle" />

一个有趣的说明:我使用相同的代码来设置KO绑定隐藏字段的值,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

它对$("#jobTitle").val(jobTitle)不起作用的原因是因为jobTitle敲除数据绑定实际上是函数。如果您要在代码中检查该点并查看返回的作业标题,您会发现它是一个函数。您需要使用$("#jobTitle").val(jobTitle());

以获得淘汰值的返回。

答案 1 :(得分:0)

这不是KnockoutJS的问题,而是我加载脚本和调用函数的序列。

我正在通过文档就绪的查询字符串设置文本框的值 - 在KO绑定到的视图模型之前已经实例化了。

所以我用parse / set脚本创建了一个新函数,并在创建视图模型并将其绑定到KO后调用它。

理想情况下,我会写一个事件处理程序/回调来监视敲除绑定然后运行它 - 但是无法找到knockout是否支持这样的事件回调。如果他们这样做 - 请告诉我。

理想我想做点什么,所以序列无关紧要

ko.on("bind", function(viewModel) {
 // this runs after knockout binds a view model
});