我有,我认为这是一个相当直接的淘汰局面。我有一个来自WebApi的模型,它包含一个带有Success
元素的数组。我需要成功的价值来确定呈现的属性。我已经验证所有数据都来自WebApi,但除了表shell外,其他任何内容都会呈现。开发控制台中没有错误。
<div id="model1Wrapper">
<table class = "table">
<thead >
<tr >
<th >Stuff</th><th>Things</th>
</tr>
</thead>
<tbody data-bind = "foreach: $data.historyArray" >
<!--ko if: Success -->
<tr class = "success" >
<td data-bind = "text: $data.ThingA" > </td>
<td data-bind = "text: ThingB" > </td>
</tr>
<!-- /ko -->
<!--ko ifnot: Success -->
<tr class = "danger" >
<td colspan="3" data-bind = "text: ThingC" > </td>
</tr>
<!-- /ko -->
</tbody>
</table>
</div>
[{
"ThingA": "A",
"ThingB": "B",
"ThingC": "C",
"Success": false
}, {
"ThingA": "A",
"ThingB": "B",
"ThingC": "C",
"Success": true
}]
这是监控来自多个端点的进程,因此我在页面上有多个ViewModel。所以我在页面的其他地方制作了一个粗略的例子。
<script>
var sampleModelData = [{
"ThingA": "A",
"ThingB": "B",
"ThingC": "C",
"Success": false
}, {
"ThingA": "A",
"ThingB": "B",
"ThingC": "C",
"Success": true
}]
var viewModel1 = {
historyArray: ko.observableArray()
};
function onNewHistory(data) {
viewModel1.historyArray(data);
}
$(document).ready(function(){
ko.applyBindings(viewModel1, document.getElementById("model1Wrapper"));
onNewHistory(sampleModelData);
})
</script>
我不得不掩盖一些特殊情况,但要点是,ajax调用在示例中返回一个数组。有一个函数被调用来将新数据更新为observable,我希望该表能够重新呈现,但事实并非如此。
我已尝试取出if / ifnot业务但不起作用。
Fiddler讨厌我,我无法设置一个干净的版本来尝试。
谢谢!
答案 0 :(得分:4)
问题在于此代码:
var viewModel1 = {
historyArray = ko.observableArray();
}
您将声明对象的语法与函数内部代码的语法混合在一起。声明对象时,请勿使用=
和;
。而是使用:
和,
。
如果您将声明更改为以下内容,则应该可以正常工作。
var viewModel1 = {
historyArray: ko.observableArray()
}
答案 1 :(得分:0)
只需为这个问题添加另一个答案,以防将来有人遇到它。我遇到了这个问题,这是在方法中初始化我的可观察数组的结果。我不是要这样做(复制粘贴错误),并且它在控制台中没有产生任何错误,因此很难跟踪。
例如:
LoadJSArrayIntoObservable(results) {
vm.validationResults = ko.observableArray(); <---- THIS IS INVALID.
vm.validationResults([]); <---- THIS IS WHAT I MEANT TO DO!!
$.each(results, function () {
try {
vm.validationResults.push(new ValidationResult(this));
}
catch (err) {
alert(err.message);
}
});