2013-07-09 58 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中獲得了一些啓發。

相關問題