2013-07-09 57 views
0

我有一个构建的SharePoint 2010应用程序,它使用backbone.js从列表中检索项目。到目前为止,我可以使用.fetch()和.save()方法,但.destroy()方法不会执行任何操作。成功方法返回未定义。Backbone的model.destroy()不适用于SharePoint 2010 REST列表项目

这是我的模型。请注意,我为每个SharePoint的规范设置了他们的REST API的工作方式。

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({ 
    type: "DELETE", 
    url: this.model.url(), 
    contentType: "application/atom+xml" 
}); 

我已经研究了如何重置Backbone的同步方法,但无济于事。我试过Backbone.emulateHTTP和Backbone.emulateJSON。

+1

您是否检查过服务器日志,以查看“$ .ajax”调用和'model.destroy()'生成的请求中有什么不同?你有没有在你的模型上设置['idAttribute'](http://backbonejs.org/#Model-idAttribute)属性为'Id''? –

+0

当我在$ .ajax()调用中使用它作为url时,'Id'字段似乎正常工作。但我只是尝试了你的建议,没有看到任何改变。但是,对于你的第一点......是否有像Chrome开发人员工具那样的方法来检查$ .ajax或.destroy方法在做什么?我无法访问服务器端日志。谢谢! – bentedder

+1

查看开发人员工具中“网络”下的“XHR”。 –

回答

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 repository中获得了一些启发。

相关问题