2013-05-12 53 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。

相关问题