backbone-pageable remove()使用无效的url

时间:2013-09-02 20:38:49

标签: javascript backbone.js

我对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以同样的方式运行?

2 个答案:

答案 0 :(得分: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')
        }
    }
});

答案 1 :(得分:0)

升级到主干1.1.0 似乎解决了这个问题。

我遇到了与backbone-pageable扩展的骨干1.0.0集合相同的问题。

抬头!请务必留意1.1 upgrade notes,因为主干1.1与1.0代码不完全兼容,例如传递给视图的options不是更长时间自动显示为this.options