2012-05-28 31 views
2

我在嘗試使用Backbone.js進行一項基本任務,但無法使其工作。我只想對我的模型執行獲取操作,並讓它更新視圖。這裏是我的代碼:make backbone.js'fetch'自動更新視圖

(function($) { 
    var HomeModel = Backbone.Model.extend({ 
     defaults: { 
      lead: "not logged in", 
     }, 
     url: 'test.php' 
    }); 

    var HomeView = Backbone.View.extend({ 
     initialize: function() { 
      this.model = new HomeModel(); 
      this.model.bind("change", this.render); 
      this.model.fetch(); 
     }, 

     el: $("#content"), 

     render: function() { 
      this.$el.html(this.model.get("lead")); 
     } 
    }); 

    var homeView = new HomeView(); 
})(jQuery); 

我可以看到「test.php的」加載成功,但渲染功能不會被調用。

我錯過了什麼?

回答

2

你是怎麼看到「test.php」加載成功的?也許AJAX請求成功,但響應不是有效的JSON?嘗試將成功和錯誤回調添加到獲取調用:this.model.fetch({success: function (resp) { console.log('success: %o', resp) }, error: function (er) { console.log('error: %o', er) });

+0

我應該知道。謝謝! – McGarnagle

+0

不客氣!我也面臨這個問題。 – theotheo

2

我想我有正確的答案。您在render函數中指的是this,但this的上下文是事件而不是您的類。因此,您應該使用下劃線的bindAll函數將類綁定到函數的內部。像這樣:

var HomeView = Backbone.View.extend({ 
    initialize: function() { 
     _.bindAll(this, 'render'); // bind 'this' in 'render' 
     this.model = new HomeModel(); 
     this.model.bind("change", this.render); 
     this.model.fetch(); 
    }, 
}); 

否則,this.el不存在,或者它至少是錯誤的,並且安靜地失敗。

+0

這是相同的結果。 (我注意到*綁定*仍然在其他情況下工作。) – McGarnagle

+0

嗯,對不起。你有一個jsfiddle或我們可以玩的東西嗎? – Mosselman