2

所以我在单页应用程序中使用带有KO 映射插件的 KnockoutJS ,一切都很好......除了......

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

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

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 绑定隐藏字段的值,它工作正常。

4

2 回答 2

0

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

我正在通过文档准备好的查询字符串设置文本框的值 - 在 KO 绑定到的视图模型被实例化之前。

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

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

理想情况下,我想做这样的事情,所以顺序无关紧要

ko.on("bind", function(viewModel) {
 // this runs after knockout binds a view model
});
于 2013-05-09T20:26:02.973 回答
0

它不起作用的原因$("#jobTitle").val(jobTitle)是因为 jobTitle 淘汰赛数据绑定实际上是函数。如果您要在代码中检查该点并查看返回的职位名称,您会发现它是一个函数。你需要使用$("#jobTitle").val(jobTitle());

为了获得淘汰赛价值的回报。

于 2013-05-09T18:43:52.510 回答