我在让 foreach 循环在 KnockOut.js 中工作时遇到问题,即使我尝试让代码抛出错误,它也不会。就好像它根本没有尝试绑定到表一样。
var History = function (data) {
this.Average = ko.observable(data.Average);
this.Count = ko.observable(data.Count);
};
var DataSource = function (data) {
var convertData = function (array) {
return $.map(data.Data, function (option) {
return new History;
});
};
this.Data = ko.observableArray(this.convertData());
return {
'Data': this.Data
};
};
var dataMappingOptions = {
create: function (options) {
return new DataSource(options);
}
};
var dataModel = function () {
this.source = ko.mapping.fromJS({ 'Data': [], 'Percentage': 0 });
};
currentViewModel = new dataModel();
ko.applyBindings(currentViewModel);
我已经消除了很多复杂性,因为其他一切都有效。基本上,我使用 Knockout.Mappings 将 AJAX 响应映射到这些对象并为计算字段添加函数。这是似乎忽略了我所做的一切的 HTML;它会显示,但没有任何绑定。
<table>
<thead>
<tr>
<th>Average</th>
<th>Frequency</th>
</tr>
</thead>
<tbody data-bind="foreach: kjhkjh">
<tr>
<td data-bind="text: $data.Average()"></td>
<td data-bind="value: $data.Average"></td>
<td data-bind="text: $data.Average"></td>
<td data-bind="value: $data.Average()"></td>
<td>Test</td>
</tr>
</tbody>
</table>
由于kjhkjh
对象没有绑定,我认为它会引发错误,但事实并非如此。即使我把source.Data
它放进去也无济于事;它只显示静态表,没有任何东西绑定到它。
更新:为了从 Javascript 中的任何内容中获取价值,我必须使用类似这样的东西:
console.log(currentViewModel.source.Data()[11].Average());