0

我有一个我正在构建的 SharePoint 2010 应用程序,它使用主干.js 从列表中检索项目。到目前为止,我可以使用 .fetch() 和 .save(),但是 .destroy() 方法什么也没做。成功方法返回未定义。

这是我的模型。请注意,我正在根据 SharePoint 的关于其 REST API 工作方式的规范设置 URL。

app.model.Reservation = Backbone.Model.extend({
    url : function() {
        return this.get("Id") ? '/_vti_bin/listdata.svc/Reservations(' + this.get("Id") + ')' : '/_vti_bin/listdata.svc/Reservations'; 
    },
    parse: function(response) {
        return response;
    }
});

如果我尝试this.model.destroy()不会返回任何内容,但是如果我使用直接的 $.ajax() 调用,它会很好地删除:

$.ajax({
    type: "DELETE",
    url: this.model.url(),
    contentType: "application/atom+xml"
});

我对如何重置 Backbone 的同步方法进行了很多研究,但无济于事。我试过 Backbone.emulateHTTP 和 Backbone.emulateJSON。

4

1 回答 1

0

这是如何完成的:

在视图中,使用this.model.destroy()(如预期)

在模型中,设置idAttribute: "Id"(感谢mu-is-too-short)。另外,将 url 函数更改为使用this.id而不是this.get('Id');

return this.id ? '/_vti_bin/listdata.svc/Reservations(' + this.id + ')' : '/_vti_bin/listdata.svc/Reservations'; 

然后在模型中添加一个同步方法:

sync: function(method, model, options) {
    var self = this;
    var methodMap = {
        'create': 'POST',
        'update': 'POST',           
        'delete': 'DELETE',
        'read': 'GET'
        },

        type = methodMap[method],

        // Default JSON-request options.
        params = _.extend({
            type: type,
            url: self.url(),
            contentType: "application/atom+xml",
            dataType: 'json'
        }, options);

    return $.ajax(params);
}

注意:我现在已经通过创建、读取和删除对此进行了测试。更新是我列表中的下一个,似乎需要进行一些配置。对于这个解决方案,我从Backbone.SharePoint 存储库中获得了一些灵感。

于 2013-07-09T21:58:55.223 回答