我是淘汰赛的新手,我有以下问题。
型号:
function AdListModel() {
var self = this;
self.Ads = ko.observableArray([]);
this.addSome = function() {
$.ajax({
type: "GET",
url: '/Home/GetAllAds',
data: { startPosition: 0, numberOfItems: 10},
dataType: "json",
success: function(data) {
self.Ads.push(data);
},
error: function(err) {
alert(err.status + " : " + err.statusText);
}
});
};
this.addSome();
}
// The custom binding (code below) is for dynamic data loading on scroll event (like posts in facebook)
ko.bindingHandlers.scroll = {
updating: true,
init: function(element, valueAccessor, allBindingsAccessor) {
var self = this;
self.updating = true;
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(window).off("scroll.ko.scrollHandler");
self.updating = false;
});
},
update: function(element, valueAccessor, allBindingsAccessor) {
var props = allBindingsAccessor().scrollOptions;
var offset = props.offset ? props.offset : "0";
var loadFunc = props.loadFunc;
var load = ko.utils.unwrapObservable(valueAccessor());
var self = this;
if (load) {
element.style.display = "";
$(window).on("scroll.ko.scrollHandler", function() {
if (($(document).height() - offset <= $(window).height() + $(window).scrollTop())) {
if (self.updating) {
loadFunc();
self.updating = false;
}
} else {
self.updating = true;
}
});
} else {
element.style.display = "none";
$(window).off("scroll.ko.scrollHandler");
self.updating = false;
}
}
};
ko.applyBindings(new AdListModel());
HTML:
<div class="col-lg-12" data-bind="foreach: Ads">
// some code
</div>
<div data-bind="scroll: Ads().length < 50, scrollOptions: { loadFunc: addSome, offset: 10 }">loading</div>
因此,最初AJAX从数据库加载10条记录,它呈现完全正常。然后,如果我向下滚动,它应该添加,向我的可观察数组推送另外10个(相同的记录)。它工作如果我向AJAX SUCCESS添加虚拟数据(没有数据库),但是如果我想将ajax结果推送到可观察数组,它会给我一个错误“无法处理绑定”。 我知道ajax是异步的,它需要一些时间来加载日期,在渲染时没有数据,但我不知道该怎么做。我需要等待ajax,但是......或者它可能是另一个问题。感谢。