Knockout.js ko.dataFor

mbi*_*ird 3 knockout.js

我有一个带有输入文本框的数据绑定

<input id="tColorCode" type="text" data-bind="value: ColorCode" />
Run Code Online (Sandbox Code Playgroud)

我无法访问设置视图模型的外部 JavaScript,所以我没有我需要的关于对象的信息,但是如果我单击一个元素,然后在处理程序中我可以更改它的值:

$("#tColorCode").live("click", function () {
    //....
    ko.dataFor(this).ColorCode("#ffffff");
}
Run Code Online (Sandbox Code Playgroud)

但是我需要在单击处理程序之外执行此操作,因此我尝试使用元素的名称,但它不起作用:

var c = $("#tColorCode");
console.log(c); //OK
ko.dataFor(c).ColorCode("#ffffff"); //TypeError: ko.dataFor(...) is undefined
Run Code Online (Sandbox Code Playgroud)

这可以用另一种方式完成吗?

谢谢!

dot*_*tom 5

您需要将特定的 HTML 元素传递给 method dataFor,但是,变量c是 jQuery 选择器,而不是元素。要从选择器中获取特定元素,您只需获取选择器的第一项:

var c = $("#tColorCode");
ko.dataFor(c[0]).ColorCode("#ffffff");  // use c[0] instead of c
Run Code Online (Sandbox Code Playgroud)

与事件处理程序情况的不同之处在于,事件处理程序this表示特定元素,而不是选择器,因此它可以正常工作。