Backbone Paginator Collection不会在重置时触发渲染

时间:2013-02-03 20:31:28

标签: javascript jquery backbone.js

我有一个Backbone Paginator Collection:

    var ExercisesCollection = Backbone.Paginator.requestPager.extend({

        model: ExerciseModel,

        paginator_core: {
            url: "/exercises"
        },

        paginator_ui: {
            firstPage: 1,
            currentPage: 1,
            perPage: 10,
            totalPages: 10
        },

        server_api: {
            "filter": "",
            "categories": "",
            "top": function() { return this.perPage; },
            "skip": function() { return this.currentPage * this.perPage; }
        },

        parse: function (response) {
            this.totalPages = response.meta.totalPages;
            return response.data;
        }

    });

我在Backbone View中使用它是这样的:

var Exercises = Backbone.View.extend({

    initialize: function () {
        this.collection = new ExercisesCollection();
        this.collection
            .on( "reset", this.render, this )
            .on( "change", this.render, this);
        this.collection.goTo( 1 );
    },

    render: function() {
        alert("bah!");
    }
});

通过查看网络活动,我可以看到它正在向服务器发送请求并接收适当的响应。但它从不调用渲染功能。重置和更改事件似乎不起作用。

任何想法我做错了什么?

由于

1 个答案:

答案 0 :(得分:2)

我在2016年有同样的问题:) 当您使用'reset'模式时,您需要收听// in a view this.listenTo(this.collection, 'sync', this.renderPage); 事件,而不是reset()

'reset'

来自主干文档(http://backbonejs.org/#Collection-fetch):

  

当模型数据从服务器返回时,它使用set to   (智能地)合并获取的模型,除非你通过{reset:   true},在这种情况下,集合将被(有效地)重置。

默认情况下,它不会调用'sync',因此不会发生(window,document,'script','//www.google-analytics.com/analytics.js','ga');事件。

我在这个答案中发现了(window,document,'script','//www.google-analytics.com/analytics.js','ga2');事件: https://stackoverflow.com/a/17053978/1657101

  

从骨干1.0开始,model.fetch()会触发同步'。这就是你应该绑定的东西。