2015-11-26 65 views
0

後,我嘗試使用Backbone.sync發送請求:一些數據更新Backbone.Model Backbone.sync

... 
async createModel(model) { 
    await Backbone.sync('create'/*or 'update' or 'delete'*/, model); 
    console.log(model.toJSON()); 
    model.fetch(); // i don't want to do this 
} 
... 

.sync('...')服務器響應,但該數據是不一樣的model.toJSON(),所以我需要額外.fetch()方法正確更新我的模型。

爲什麼會發生?如何在.sync()之後立即更新我的模型,而不需要額外的.fetch(){wait: true}選項沒有幫助。

+0

我找到了解決方法:'model.set(await Backbone.sync('create',model))' – mqklin

+0

你應該讓你的服務器在任何http方法上返回相同的資源,而不僅僅是GET –

回答

0

根據評論,它看起來像你已經解決了這個問題。然而,我並不完全相信你會從那個解決方案中獲得你期望的確切行爲。

如果您只想使用同步功能,我認爲您可以通過其他方式解決您的問題。根據Backbone documentation, Backbone.sync使用jquery.ajax並返回一個jqXHR對象,而不是來自調用的實際響應數據。更不用說響應數據仍然不會被格式化爲Backbone.Model。但是,您可以簡單地使用.done和.fail,就像使用ajax請求一樣,並在那裏執行您的model.set()

... 
async createModel(model) { 
    await Backbone.sync('create'/*or 'update' or 'delete'*/, model) 
     .done(function(data) { 
      var newModel = new Model(data); 
      [MODEL LOCATION].set(newModel); 
     }) 
     .fail(function(data) { 
      console.log('Error: ' + data.status); 
     }); 
} 
... 

但是,你可以這樣做同樣的事情的另一種方式是,它看起來像Backbone.sync function需要第三個參數[選項]和基於關閉它看起來像,它需要的選項documentation再次是成功和錯誤回調。所以,如果你使用這種模式會是這樣的:

... 
async createModel(model) { 
    await Backbone.sync(
     'create', //or 'update' or 'delete' 
     model, 
     { 
      success: function(data) { 
       var newModel = new Model(data); 
       [MODEL LOCATION].set(newModel); 
      }, 
      error: function(data) { 
       console.log('Error: ' + data.status); 
      } 
     } 
    ); 
} 
... 

在所有情況下的數據參數是來自於REST調用迴響應數據。

無論如何,希望這有助於未來。