2015-07-12 37 views
4

由於某種原因,我需要一些幫助,因爲我無法讓我的視圖在模型更改後重新渲染。Backbone中的AJAX請求中的模型更改後重新渲染

var ResultLoanView = Backbone.View.extend({ 
     id:"result", 
     initialize: function(){ 
     this.render(); 
     this.on('submissionMade',this.getData,this) 
     this.model.on('change',this.render,this) 
     }, 

     template: _.template("<% _.each(models, function(data,index) { %><div><%= index %></div> <%= data %><% }); %>"), 

     getData: function(){ 
      var that = this; 
      $.ajax({ 
       type: "GET", 
       url:"http://zillow.com/webservice/mortgage/CalculateAffordability.htm?", 
       data: { 
       "zws-id":"APIKEY", 
       annualincome: 1000000, 
       monthlypayment: 2000, 
       down: 800000, 
       monthlydebts: 1500, 
       rate: 6.504, 
       schedule: "yearly", 
       term: 360, 
       debttoincome: 36, 
       incometax: 30, 
       propertytax: 20, 
       hazard: 20000, 
       pmi: 1000, 
       output: "json" 
       }, 
       dataType: "jsonp", 
       success: function(data) { 
       that.model.attributes = data.response 
       console.log(that.model) 
        } 
       , 
       error: function(result) { 
        alert("Error"); 
       } 
      }) 
     }, 
     render:function(){ 
     console.log("rerender") 
     var need = this.$el.html(this.template({models:this.model.toJSON()})) 
     $('body').append(need) 

     } 

    }) 

因此,當submissionMade從父視圖觸發。這將啓動$.ajax請求。最後,這會將我想要分配給我的關聯模型的數據帶回ResultLoanView。出於某種原因,該模型未被更改,因爲initialize中的偵聽器不會重新呈現我的html。我的目標是將數據重新分配給我的模型,該模型將根據initialize中的偵聽器重新渲染。有任何想法嗎?

回答

3

我相信你需要打電話。

that.model.set(data.response) 

而不是直接更改.attributes。文檔提及set()的更改事件。

只是旁註,查找this.listenTo()model.on()之間的區別。許多實例最好使用listenTo來防止內存泄漏。

相關問題