【问题标题】:infinite scroll knockout multiple requests无限滚动淘汰多个请求
【发布时间】:2013-07-26 21:15:24
【问题描述】:

我想在我的 html 页面上使用无限滚动。我不知道为什么我有多个服务器答案...

$(window).data('jsonpready', true).scroll(function (e) {
     if ($(window).data('jsonpready') == false) return;

     if ($(window).scrollTop() >= $(document).height() - $(window).height() - 100) {
         // $('div#loadmoreajaxloader').show();
         $(window).data('jsonpready', false);
         viewModel.ui.FlashbackReport.MoreContacts();
         console.info("data loading");
         if (viewModel.ui.dataAvailable) {
             $(window).data('jsonpready', true);
         }

     }
 });

稍后调用映射函数的服务器请求函数:viewModel.ui.FlashbackReport.MoreContacts();

if(viewModel.ui.dataAvailable)测试映射是否完成

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    在这里我找到了一个漂亮的实现。 http://jsfiddle.net/8x4vG/2/

        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
        }
      }
     }
    
    var viewModel = function(){            
    this.collection = ko.observableArray([]) 
    var disney = ["Mickey", "Donald", "Daffy", "Hewie", "Dewie", "Lewie"]
    var self = this;
    this.addSome = function(){ 
    
        for(var i = 0; i < 40; i++){
        self.collection.push(disney[Math.floor((Math.random()*6))]) 
            }
    }
    
    this.addSome()
    
    }
    
    
    ko.applyBindings(new viewModel());
    

    【讨论】:

    • 不幸的是,该代码未经作者许可 :( 我发现了这个:github.com/thinkloop/knockout-js-infinite-scroll,MIT 许可。
    • 对不起,我真的迟到了。我想知道是谁解雇了scroll.ko.scrollHandler?是否与淘汰核心或某些第三方库有关?
    • $(window).on("scroll") 是一个 jQ 事件,由 jQ 触发。上面的脚本试图通过使用 .ko.scrollHandler 对其进行命名空间来更好地描述事件,因此它不会与可能对 jQ 滚动事件感兴趣的其他潜在参与者混淆。您可以在事件名称后添加带有点的任何内容。 $(window).on("scroll.foo.bar")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2018-03-22
    • 2012-11-29
    • 2012-12-17
    相关资源
    最近更新 更多