当前位置: 首页 > 知识库问答 >
问题:

无限卷轴上的主干提取集合

长孙弘壮
2023-03-14

我正在学习主干,现在正在考虑如何应用无限卷轴,并在每次卷轴位于页面底部时从我的收藏中提取/加载20个项目。我一直在寻找不同的LIB之类的东西,但没有真正接近。有谁能解释/展示这是如何最好地完成的?

我现在已经添加了infiniscroll.js插件并试图让它工作。但是在滚动中它不会加载新项目。我应该在appendRender上做什么?怎么做?

    var StartView = Backbone.View.extend({

    tagName: "section",
    id: "start",
    className: "content",

    events: {

    },
    initialize: function(){
        $(".container").html(this.el);
        console.log("init start");
        this.template = _.template($("#start_template").html(), {} );
        this.collection = new VideoCollection();


        _.bindAll(this, "render");
        this.render();
        this.infiniScroll = new Backbone.InfiniScroll(this.collection, {
            success: this.appendRender,
            pageSize: this.collection.length,
            scrollOffset: 100
        });
    },

    appendRender: function() {
        var self = this;
        self.$el.html(self.template);
        self.$el.find(".videos").append("<div style='margin-bottom:30px; width:100%; height:170px; float:left; background-color:#e4e4e4;'>fff</div>")
    },

    render: function(){
        var self = this;
        this.$el.html("loading");
        console.log("render start")
    },
    kill: function() {
        console.log("kill start");
        this.remove(); 
    }
});
return StartView;

共有2个答案

施飞鸿
2023-03-14

我会这样做(尽管document.addEventListener(“滚动”)部分并不优雅

(function() {
    "use strict";

    var Item = Backbone.Model.extend({});

    var Items = Backbone.Collection.extend({

        model: Item,

        url: "/api/items/"
    });

    var ItemView = Backbone.View.extend({

        tagName: "li",

        render: function() {
            this.$el.html(this.model.get("name"));
            return this;
        }

    });

    var ItemsList = Backbone.View.extend({

        tagName: "ul",

        offset: 0,

        limit: 60,

        initialize: function() {
            this.collection = new Items();
            this.collection.on("reset", this.addAll, this);
            this.collection.on("add", this.addOne, this);
            this.getItems();
        },

        render: function () {
            return this;
        },

        getItems: function () {
            this.collection.fetch({
                "data": {"offset": this.offset, "limit": this.limit}, 
                "success": _.bind(function(e){
                    this.offset += this.limit;
                }, this)
            });
        },

        addOne: function(item) {
            var view = new ItemView({model: item});
            this.$el.append(view.render().$el);
        },

        addAll: function() {
            this.collection.each(this.addOne, this);
        }

    });

    var itemsList = new ItemsList();
    $(document.body).append(itemsList.render().$el);

    document.addEventListener('scroll', function (event) {
        if (document.body.scrollHeight == document.body.scrollTop + window.innerHeight) {
            itemsList.getItems();
        }
    });

}());
司徒寒
2023-03-14

主干可分页插件支持无限滚动。

这只是您的收藏扩展主干的问题。PageableCollection,并指定一些额外属性。还有一个主干视图示例,它可以监听不断变化的集合,也可以在滚动中获取。

这一切都在github页面上描述。它更新得相当频繁。

 类似资料:
  • 我用脊梁骨。js 我试图从服务器获取我的数据,但它不起作用 (服务器发送json对象) 我搜索了但没有回应 我的代码哪里不正确?

  • 下面是我用(FacetModels)填充我的收藏的内容 如何访问可用值[]数组 “FacetModels”:[{“FacetDisplayLabel”:null,“SelectedValues”:[],“AvailableValues”:[],“UnknownResults”:0,“ActionURI”:null,“FacetGroupName”:“Category”,“FacetGroupFri

  • 我刚决定学骨气。我在看视频教程。这里的一切都很好,但在我的末尾,我遇到了一个错误“Uncaught TypeError:无法读取未定义的属性'name'。 这是我的代码: “项目详细信息”函数给出了“未捕获的TypeError:无法读取未定义的属性“名称”错误。当然,如果我在视图中不使用“名称”属性,我会得到“未捕获的TypeError:无法读取未定义的属性“类别”。在我跟随的视频教程中,一切正常

  • 我正在向我的主干集合中添加一个项目,如下所示: 我在MyCollection中覆盖了同步,如下所示: 但是,似乎在add之后不会调用sync,add成功执行并触发“add”事件。我错过什么了吗?还是这是正确的行为?

  • 我正在尝试使用主干从MySQL(使用基于PHP的API)获取数据。我想检索20个批次的项目。例如,我有10000条记录,但只想在页面加载时显示20条记录。当用户向下滚动时,我希望在每次到达页面底部时加载下一个20。我的查询没有按ID(按设计)排序,因此可能会增加一级复杂性。如何在主干中实现这一点?

  • 我有一个骨干应用程序,我正在构建与Trigger.io,并有一点困惑,为什么当我单击手机工具栏中的后退按钮时,数据正在消失。 以下是设置: 我有一个视图SearchResultsView,看起来像这样(为了简洁起见删除了Trigger.io代码): 以下是模板: 这是路由器: 它在实践中是这样工作的:当我最初加载页面时,没有结果列表(应该是这样)。我输入查询并执行搜索,然后它会回来,按照它应该的方