无法处理foreach绑定,请等待ajax结果

时间:2016-02-14 05:11:19

标签: javascript jquery ajax knockout.js

我是淘汰赛的新手,我有以下问题。

型号:

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,但是......或者它可能是另一个问题。感谢。

0 个答案:

没有答案