敲除 - 无法处理绑定 - 使用
Knockout - Unable to process binding - With
我对 KnockoutJS 还是相当陌生,我遇到了绑定问题,看不出哪里出了问题。我尝试了各种方法,但似乎没有任何效果。我确定可能有一个简单的解决方案,我只是看不到它!
我正在通过 ajax 调用数据并尝试在文本框中显示数据中的一项,然后可以对其进行更新。我在控制台中收到以下错误:
Uncaught ReferenceError: Unable to process binding "with: function
(){return KHAViewModel }" Message: Unable to process binding "with:
function (){return fundedWTEResults }" Message: Unable to process
binding "textInput: function (){return ActualFundedWTE }" Message:
ActualFundedWTE is not defined
下面是我的代码的简化版本,我用一些 JS 复制了我的 ajax 脚本。我还在 jsFiddle:
上复制了它
HTML
<div class="container">
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
</div>
<div class="container" id="dateSearch" >
<h2></h2>
<form class="form-inline" data-bind="with: KHAViewModel">
<div class="form-group" data-bind="with: fundedWTEResults">
<span>Funded WTE: </span>
<input id="fundedWTE" data-bind="textInput: ActualFundedWTE">
</div>
</form>
</div>
JS
// KHA View Model
function KHAViewModel() {
var self = this;
self.fundedWTEResults = ko.observableArray([]);
function fundedWTE (team) {
// $.ajax({
// url: "/...",
// type: "POST",
// ...........
// });
var r = [{"Team":team,"ActualFundedWTE":12.00}];
ko.mapping.fromJS(r, {}, self.fundedWTEResults);
}
fundedWTE('TeamA');
}
// Master View Model
function masterVM() {
var self = this;
self.KHAViewModel = new KHAViewModel();
};
// Activate Knockout
ko.applyBindings(new masterVM());
看起来@user3297291 已经非常敏捷地解决了你的问题。
一个技巧可以帮助您在将来调试这些类型的问题时使用 ko.dataFor 和 ko.contextFor。特别是如果您使用 Chrome,控制台上的 $0 指的是开发人员工具中当前选定的元素。
Select 您要调查的元素并在开发控制台中键入:
ko.dataFor([=10=])
ko.dataFor(document.getElementById("fundedWTE")) //Equivalent to this
它将显示该元素绑定到的内容,通常足以帮助您了解绑定上下文的实际内容。
ko.contextFor 为您提供更多信息,如果您正在使用 $root、$parent、$parents 等,这会很方便
感谢@user3297291 指出了明显的问题。
我使用的 with:
绑定创建了一个新的 binding context,以便后代元素绑定在指定对象的上下文中。所以我的数组仍然是一个对象,因此无法以所需的方式访问数组中的对象。
要使用的正确绑定是 foreach:
绑定,foreach 绑定为数组中的每个条目复制一段标记,并将该标记的每个副本绑定到相应的数组项.因此允许我显示数组中每个对象中的各个值。
还要感谢@Chris 分享了一种在未来使用 ko.dataFor()
代码调试此类问题的好方法。
我对 KnockoutJS 还是相当陌生,我遇到了绑定问题,看不出哪里出了问题。我尝试了各种方法,但似乎没有任何效果。我确定可能有一个简单的解决方案,我只是看不到它!
我正在通过 ajax 调用数据并尝试在文本框中显示数据中的一项,然后可以对其进行更新。我在控制台中收到以下错误:
Uncaught ReferenceError: Unable to process binding "with: function (){return KHAViewModel }" Message: Unable to process binding "with: function (){return fundedWTEResults }" Message: Unable to process binding "textInput: function (){return ActualFundedWTE }" Message: ActualFundedWTE is not defined
下面是我的代码的简化版本,我用一些 JS 复制了我的 ajax 脚本。我还在 jsFiddle:
上复制了它HTML
<div class="container">
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
</div>
<div class="container" id="dateSearch" >
<h2></h2>
<form class="form-inline" data-bind="with: KHAViewModel">
<div class="form-group" data-bind="with: fundedWTEResults">
<span>Funded WTE: </span>
<input id="fundedWTE" data-bind="textInput: ActualFundedWTE">
</div>
</form>
</div>
JS
// KHA View Model
function KHAViewModel() {
var self = this;
self.fundedWTEResults = ko.observableArray([]);
function fundedWTE (team) {
// $.ajax({
// url: "/...",
// type: "POST",
// ...........
// });
var r = [{"Team":team,"ActualFundedWTE":12.00}];
ko.mapping.fromJS(r, {}, self.fundedWTEResults);
}
fundedWTE('TeamA');
}
// Master View Model
function masterVM() {
var self = this;
self.KHAViewModel = new KHAViewModel();
};
// Activate Knockout
ko.applyBindings(new masterVM());
看起来@user3297291 已经非常敏捷地解决了你的问题。
一个技巧可以帮助您在将来调试这些类型的问题时使用 ko.dataFor 和 ko.contextFor。特别是如果您使用 Chrome,控制台上的 $0 指的是开发人员工具中当前选定的元素。
Select 您要调查的元素并在开发控制台中键入:
ko.dataFor([=10=])
ko.dataFor(document.getElementById("fundedWTE")) //Equivalent to this
它将显示该元素绑定到的内容,通常足以帮助您了解绑定上下文的实际内容。
ko.contextFor 为您提供更多信息,如果您正在使用 $root、$parent、$parents 等,这会很方便
感谢@user3297291 指出了明显的问题。
我使用的 with:
绑定创建了一个新的 binding context,以便后代元素绑定在指定对象的上下文中。所以我的数组仍然是一个对象,因此无法以所需的方式访问数组中的对象。
要使用的正确绑定是 foreach:
绑定,foreach 绑定为数组中的每个条目复制一段标记,并将该标记的每个副本绑定到相应的数组项.因此允许我显示数组中每个对象中的各个值。
还要感谢@Chris 分享了一种在未来使用 ko.dataFor()
代码调试此类问题的好方法。