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

使用jQuery val()更新KnockoutJS绑定的文本框,jquery,knockout.js,knockout-mapping-plugin,Jquery,Knockout.js,Knockout Mapping Plugin,所以我在一个单页应用程序中使用KnockoutJS,一切都很好。。。除了 引用站点可以选择发送查询字符串中的一些值来预填充两个文本框。我有一个JS函数,它解析查询字符串,并使用jQuery val()填充KO绑定的textbox值。但是,该值从未设置过 下面是一些我正在尝试的伪代码 var jobTitle = "Ninja"; $("#jobTitle").val(jobTitle); // doesn't work $("#jobTitle").val(jobTitle).change(

所以我在一个单页应用程序中使用KnockoutJS,一切都很好。。。除了

引用站点可以选择发送查询字符串中的一些值来预填充两个文本框。我有一个JS函数,它解析查询字符串,并使用jQuery val()填充KO绑定的textbox值。但是,该值从未设置过

下面是一些我正在尝试的伪代码

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

它不适用于
$(“#jobTitle”).val(jobTitle)
是因为jobTitle敲除数据绑定实际上就是函数。如果您在代码中的这一点进行检查,并查看jobtitle返回的是什么,您将看到它是一个函数。您需要使用
$(“#jobTitle”).val(jobTitle())


为了获得敲除值的返回。

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

在KO绑定到的视图模型被实例化之前,我通过documentready上的查询字符串设置textbox的值

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

理想情况下,我会编写一个事件处理程序/回调来观察敲除绑定是否运行,但无法找到敲除是否支持这样的事件回调。如果有,请告诉我

理想情况下我想做一些这样的事情,这样序列就不重要了

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

只是好奇,您是否可以不使用
ko.observable()
语法来设置值?可能是
val()
弄脏了ko的内部结构的问题。只是一个想法。我尝试将视图模型上的属性设置为一个可以检查查询字符串值的计算可观察对象,但这也不起作用。但这可能是如何使用KO Mapping设置的问题,这也是值得注意的。。如果我从html标记中取出数据绑定语法,值就会正确设置。所以这肯定是淘汰赛中的一些东西,而不是我获取/设置的值?或者,制作一个JSFIDLE来重现你的问题?@AndyBrudtkuhl好吧,我做了一个非常基本的小提琴,看问题是。。。jobTitle只是一个字符串变量,我从一个查询字符串值设置它。我假设在您的实际案例中,它不是字符串,因为您声明上面的是伪代码。如果它被认为是一个KO对象,或者被指定给一个KO对象,那么上面的说法仍然成立。