我是一个全新的stackoverflow和淘汰赛,我有一个问题。我想通过索引访问JSON对象。如果我在我的代码中添加虚拟数据,它工作正常,但如果我从JSON添加数据并停止,它会给我一个错误。
错误 未捕获的TypeError:无法处理绑定" text:function(){return Ads()[0] .AdContent}"消息:无法阅读财产' AdContent'未定义的
我的ViewModel:
function AdListModel () {
var self = this;
self.Ads = ko.observableArray([]);
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
self.Ads(data);
},
error: function (err) {
alert(err.status + " : " + err.statusText);
}
});
}
ko.applyBindings(new AdListModel());
我收到的JSON
[{"AdId":6,"AdContent":"sadasdasdsad","CategoryId":1,"CategoryNameRU":"Дом, стройка, ремонт"},{"AdId":12,"AdContent":"asdasd","CategoryId":1,"CategoryNameRU":"Дом, стройка, ремонт"}]
我的HTML
<div data-bind="text: Ads()[0].AdContent"></div>
<div data-bind="foreach: Ads">
<p data-bind="text: AdId"></p>
<p data-bind="text: AdContent"></p>
<p data-bind="text: CategoryId"></p>
<p data-bind="text: CategoryNameRU"></p>
</div>
所以,基本上我想在索引为0的JSON对象中只读取一个属性,然后显示所有数组。
答案 0 :(得分:1)
“Ads”数组为空,直到您没有收到对ajax调用的响应。因此“Ads()[0]”未定义。
您可以在绑定中使用其他检查:
<!-- ko if: Ads().length > 0 -->
<div data-bind="text: Ads()[0].AdContent"></div>
<!-- /ko -->
注意:“foreach”绑定进程正确地清空数组。