2013-05-12 54 views
0

我正在使用Backbone框架和Parse.com爲後端服務創建Phonegap應用程序。我用Parse.com創建一個對象(對應於骨幹模型)。 此對象有一個調用Parse.com函數save()的方法saveDraftToP()。 從視圖調用此方法後,我想檢索更新的對象。 爲此,我將「更改」事件綁定到模型,但分析分配的ID未定義。 這裏是模型的代碼:如何在保存後從Parse.com中檢索對象

var Match = Parse.Object.extend("Match", { 
    states: {'DRAFT': 0, 'RUNNING': 1, 'ENDED': 2}, 
    saveDraftToP: function() { 
    var self = this; 
    this.save({ 
     user: Parse.User.current(), 
     ACL: new Parse.ACL(Parse.User.current()), 
     state: self.states.DRAFT 
    }, { 
     success: function (result) { 
     self = result; 
     }, 
     error: function (e) { 

     } 
    }); 
    } 
});` 

這裏是視圖的代碼:我不明白爲什麼你已經保存功能封裝到另一個保存樣

 var vmNuovaPartita = Parse.View.extend({ 
      template: Handlebars.compile(template), 
      model: new Match(), 
      collection: new HintCollection(), 
      initialize: function() { 
       this.bind("change:model", console.log(this.model.id) , this); 
      }, 

      render: function (eventName) { 
       var match = this.model.toJSON(); 
       $(this.el).html(this.template(match)); 
       return this; 
      } 
     }); 

回答

0

功能。 :-)

假設你有類似myMatch這是一個對象。

通過您的用戶界面,按鈕點擊保存對象數據。您可以直接使用myMatch.save({attr:val, ...})開箱即用。 Backbone(和Parse)默認情況下是樂觀的。這意味着,您將設置模型的值,並期望持續到服務器的成功。

因此,你不需要檢索任何額外的東西。您已經擁有最新狀態的模型。

要有一個模型視圖來響應這些變化,我會設計視圖有點不同。

var vmNuovaPartita = Parse.View.extend({ 
     template: Handlebars.compile(template), 
     initialize: function() { 
      this.model.on('change', this.render); 
     }, 
     render: function (eventName) { 
      var match = this.model.toJSON(); 
      $(this.el).html(this.template(match)); 
      return this; 
     } 
    }); 

var myView = new vmNuovaPartita({ 
    model: myModel 
}); 

我初始化視圖之外的模型,然後把它作爲一個選項,當您生成一個新的視圖。當你傳遞一個模型作爲選項時,它是特殊的,將直接附加到視圖... view.model,你可以在你的視圖代碼內引用this.model

在init中,我們放置一個監聽器改變事件的模型,然後發射視圖的重新渲染。或者更好的方法是使用.listenTo()方法引入新的Backbone Events。

相關問題