3

我对 Backbone 比较陌生,我正在尝试在我的应用程序中使用 PageableCollection。

https://github.com/wyuenho/backbone-pageable

有人可以指出我,我做错了什么吗?我正在使用骨干网 1.0.0

我有一个集合和一个这样定义的模型:

var VoteList = Backbone.PageableCollection.extend({
    model: Vote,
    url: config.service + 'votes'
});

var Vote = Backbone.Model.extend({
    url: function () {
        return config.service + 'vote/' + this.id;
    }
});

稍后在应用程序中:

this.collections.voteList = new VoteList([], {mode: "client", state: {pageSize: 12}});
....
this.collections.voteList.remove(options.model);

PageableCollection.remove() 方法会触发一个 DELETE 事件,该事件使用 VoteList 集合的 URL(?)来访问 Web 服务,这反过来会产生一个错误 405“方法不允许”,因为 DELETE 方法应该有一个 {id}

@DELETE
@Path("/vote/{id}")
@Consumes({MediaType.APPLICATION_JSON})
public void deleteVoting(@PathParam("id") Integer id) {
    log.info("deleting " + id.toString());
}

当我仅通过实例化普通 Backbone.Collection 来删除分页时

var VoteList = Backbone.Collection.extend({ ... });

一切都按预期工作,Backbone 在删除时使用模型 url + id。所以我的问题是如何使 PageableCollection 以相同的方式运行?

4

2 回答 2

1

今天早上收到插件作者的邮件,好像是 Backbone 1.0.0 中的一个已知错误。我猜它会随着版本 1.0.1 消失

请看这个帖子:https ://github.com/wyuenho/backbone-pageable/issues/70

现在为了解决问题,我使用了 Backbone 的最新“主”分支,该分支已修复此问题:

https://raw.github.com/jashkenas/backbone/master/backbone.js

或者,如果由于某种原因您不能使用开发分支,那么像这样的临时解决方案也将起作用:

var Vote = Backbone.Model.extend({
    initialize: function () {
        this.url = function () {
            return config.service + 'vote/' + this.get('id')
        }
    }
});
于 2013-09-03T08:41:40.543 回答
0

升级到骨干网 1.1.0似乎可以解决这个问题。

我遇到了与骨干可分页扩展的骨干 1.0.0 集合相同的问题。

小心!请务必留意1.1 升级说明,因为主干 1.1 与 1.0 代码不完全兼容,例如options传递给视图不再自动提供为this.options.

于 2014-01-17T14:48:45.223 回答