无法在视图中的 foreach 中设置敲除绑定
Can't set knockout binding within foreach in view
我是淘汰赛的新手,正在尝试解决问题。我试图在我的视图中的 foreach 中获取一个文本框,以绑定到一个可观察的数组,但没有成功。我的 foreach 没有问题,但在内部不起作用。
我在视图上有一个简单的文本框,在我的 js 中有一个匹配的可观察对象。
这个文本框和 observable 是完美绑定的,并且总是在文本框值更改时立即更新。
我还有一个 table 和一个 foreach 以及在 foreach 中的另一个文本框。它的绑定略有不同,因为它绑定到一个数组,其中每次迭代代表 table.
的每一行
在 foreach 中的文本框上,我遇到了绑定问题。更新这些文本框中的任何一个似乎都不会更新可观察数组。
这是我的工作文本框和绑定。
<input data-bind="value: testText" />
self.testText = ko.observable("aaa");
通过以上,console.log(self.testText());始终显示文本框中的内容
这是我在 foreach 中无法使用的文本框
<tbody data-bind="foreach: Tasks">
<tr class="taskItem">
<td><input type="text" data-bind="textInput: $data.Desc()" /></td>
</tr>
</tbody>
绑定:
self.Tasks = ko.observableArray([]);
现在console.log(self.Tasks()[0].Desc());不反映 table 上 [0] 位置文本框中的内容。我猜想此文本框未正确绑定到可观察数组,但不确定原因。
我希望 console.log(self.Tasks()[0].Desc());在我的 foreach table.
上显示位置 [0] 处文本框中的任何值
非常感谢任何帮助。
干杯
您需要从 data-bind
中删除 ()
。在 textInput
绑定处理程序中,knockout 检查绑定的表达式是否是可观察的。因为你有 Desc()
它评估为静态初始值。因此,对输入的任何更新都不会将其更新回视图模型的 属性。
(另外,您可以从绑定中删除 $data
)
function Task() {
this.Desc = ko.observable();
this.Desc.subscribe(console.log);
}
function viewModel() {
this.Tasks = ko.observableArray([new Task]);
}
ko.applyBindings(new viewModel)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
<tbody data-bind="foreach: Tasks">
<tr class="taskItem">
<td><input type="text" data-bind="textInput: Desc" /></td>
</tr>
</tbody>
</table>
我是淘汰赛的新手,正在尝试解决问题。我试图在我的视图中的 foreach 中获取一个文本框,以绑定到一个可观察的数组,但没有成功。我的 foreach 没有问题,但在内部不起作用。
我在视图上有一个简单的文本框,在我的 js 中有一个匹配的可观察对象。 这个文本框和 observable 是完美绑定的,并且总是在文本框值更改时立即更新。
我还有一个 table 和一个 foreach 以及在 foreach 中的另一个文本框。它的绑定略有不同,因为它绑定到一个数组,其中每次迭代代表 table.
的每一行在 foreach 中的文本框上,我遇到了绑定问题。更新这些文本框中的任何一个似乎都不会更新可观察数组。
这是我的工作文本框和绑定。
<input data-bind="value: testText" />
self.testText = ko.observable("aaa");
通过以上,console.log(self.testText());始终显示文本框中的内容
这是我在 foreach 中无法使用的文本框
<tbody data-bind="foreach: Tasks">
<tr class="taskItem">
<td><input type="text" data-bind="textInput: $data.Desc()" /></td>
</tr>
</tbody>
绑定:
self.Tasks = ko.observableArray([]);
现在console.log(self.Tasks()[0].Desc());不反映 table 上 [0] 位置文本框中的内容。我猜想此文本框未正确绑定到可观察数组,但不确定原因。
我希望 console.log(self.Tasks()[0].Desc());在我的 foreach table.
上显示位置 [0] 处文本框中的任何值非常感谢任何帮助。 干杯
您需要从 data-bind
中删除 ()
。在 textInput
绑定处理程序中,knockout 检查绑定的表达式是否是可观察的。因为你有 Desc()
它评估为静态初始值。因此,对输入的任何更新都不会将其更新回视图模型的 属性。
(另外,您可以从绑定中删除 $data
)
function Task() {
this.Desc = ko.observable();
this.Desc.subscribe(console.log);
}
function viewModel() {
this.Tasks = ko.observableArray([new Task]);
}
ko.applyBindings(new viewModel)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
<tbody data-bind="foreach: Tasks">
<tr class="taskItem">
<td><input type="text" data-bind="textInput: Desc" /></td>
</tr>
</tbody>
</table>