任何人都可以解释我的代码中的错误,我是淘汰赛的新手...所以,最初我从数据库接收json数据并且它有效。比我点击添加一些'我想将数据库中的相同数据添加(推送)到我的可观察数组。下面的代码显然不起作用。谢谢。 错误:无法处理绑定" text:function(){return AdId}" ...
HTML:
<div data-bind="foreach: Ads">
<p data-bind="text: AdId"></p>
</div>
<div data-bind="click: addSome">Add some</div>
MODEL:
function AdListModel() {
var self = this;
self.Ads = ko.mapping.fromJS([]);
self.result = function (model) {
ko.mapping.fromJS(model, self.Ads);
}
self.InitialData = function () {
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
data: { startPosition: 0, numberOfItems: 2 },
dataType: "json",
success: function (data) {
self.result(data); <---- works
}
});
}
self.addSome = function () {
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
data: { startPosition: 0, numberOfItems: 2 },
dataType: "json",
success: function (data) {
self.Ads.push(data); <---- doesn't work
},
});
};
self.InitialData();
}
ko.applyBindings(new AdListModel());
我试过self.Ads.push(ko.mapping.fromJS(data))
- 没有工作。
答案 0 :(得分:1)
从错误消息中可以看出,model
没有AdId
属性。
您可以添加API返回的JSON模型的转储吗?
修改强>
您的Ads
媒体资源应该是ko.observableArray()
,而不是ko.mapping.fromJS([])
:
function AdListModel() {
var self = this;
self.Ads = ko.observableArray([]);
self.result = function (model) {
ko.mapping.fromJS(model, self.Ads);
}
修改2
你必须在推送之前映射数据:
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
data: { startPosition: 0, numberOfItems: 2 },
dataType: "json",
success: function (data) {
self.Ads.push(ko.mapping.fromJS(data));
},
});
编辑3
如果你的JSON看起来像这样:
[
{"AdId":1,"AdContent":"test1"},
{"AdId":2,"AdContent":"test2"}
]
然后它是一个数组,你必须迭代每个条目:
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
data: { startPosition: 0, numberOfItems: 2 },
dataType: "json",
success: function (data) {
data.forEach(function(d) {
self.Ads.push(ko.mapping.fromJS(d));
});
},
});