1

我有一个骨干分页器集合:

    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;
        }

    });

我在主干视图中使用它,如下所示:

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!");
    }
});

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

任何想法我做错了什么?

谢谢

4

1 回答 1

2

我在 2016 年遇到了同样的问题 :)
当您使用该'server'模式时,您需要收听'sync'事件,而不是'reset'.

// in a view
this.listenTo(this.collection, 'sync', this.renderPage);

从骨干文档(http://backbonejs.org/#Collection-fetch):

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

所以它默认不调用reset(),所以没有'reset'事件。

'sync'我在这个答案中 发现了这个事件: https ://stackoverflow.com/a/17053978/1657101

从主干 1.0 开始,model.fetch() 触发“同步”。这就是你应该绑定的。

于 2016-03-18T19:51:20.417 回答